跟我一起hadoop(2)——CDH
前邊已經介紹了一種hadoop的安裝工具,但是HDP動態新增節點會有一些問題,而且現在用的人好像不是很多,如果想用官方更多的,可以選擇HDP,如果想使用更方便一些,可以選擇CDH。
安裝HDP可以參考:
使用HDP快速搭建Hadoop開發環境
http://www.debugo.com/hdp-dev-setup/
下面介紹CDH的幾種安裝方式。
CDH安裝有四種方式
- Cloudera manager
- Tarball
- Yum
- Rpm
其中Yum及Rpm安裝可以算作一種安裝方式
下面是四種方式分別介紹:
- Cloudera manager 安裝
Cloudera Manager的安裝需要先修改機器的三個配置:
關閉防火牆:service iptables stop;
關閉selinux:setenforce 0或修改/etc/selinux/config:SELINUX=disabled;
配置代理:在/etc/yum.conf加入如下內容:http_proxy=http://server:port。
最好在/etc/yum.conf增加timeout時間,timeout=55555。自己設定長點就行。
準備安裝檔案cloudera-manager-installer.bin,這是個二進位制檔案,下載地址:https://ccp.cloudera.com/display … a+Manager+Downloads,這個要在64位的機器上執行,我讓它執行在CentOS-6.2,x86_64上。然後設定下執行許可權,chmod u+x cloudera-manager-installer.bin,接著就直接執行它./ cloudera-manager-installer.bin。這裡有個問題,在我自己的虛擬機器上一直執行不了,出現的問題:cannot execute binary file,可能因為它是32位的吧。
在整個安裝過程中,要確保你的機器能夠聯網,會出現讓你選擇的畫面,一般就ENTER,next,accpet就行了,然後慢慢等待等到它自行安裝結束。
啟動cloudera manager:在瀏覽器輸入你的主機,我的是http:192.168.20.195:7180。註冊一個賬號登陸如(admin,admin),進去後,會讓我們選擇主機,我就裝了偽分散式,然後安裝CDH4.1和impala,這個安裝過程時間比較長,因為它是外國的網站,網路穩定與否對安裝的影響很大,我裝這個花費很長時間,期間如果出現某個安裝包錯誤,就必須重新開始安裝,因此強調下,最好使用一個乾淨的系統(沒裝過hadoop相關程式),它會去網上下載很多rpm包,預設地把hadoop,hbase,zookeeper,hive,impala等都裝到了user/lib底下,耐心等待吧。
安裝好了之後,我們就可以啟動自己需要的服務,當然某些服務彼此會有依賴,沒關係的cloudera manager太強大了,它能幫你識別,幫助你開啟相關服務。我開啟的服務介面如下圖所示:
在開啟服務的過程中,其他的服務都正常開啟了,但是最關鍵的我需要的服務卻一直顯示不良狀態,如下圖:
Impala沒正常啟動,這是我這次研究的重中之重。出現問題,就開始找問題,後來發現是impala和資料庫(我用的是mysql)沒連線成功。下面著重講述下配置mysql連線impala。
Impala的執行需要有配置了Mysql或PostgreSQL的hive metastore,hive本身支援的derby資料庫,impala不支援。
一、配置遠端資料庫作為Hive Mestastore。
A:安裝MySQL JDBC聯結器,從’http://www.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.22.tar.gz下載聯結器,並把解壓後的mysql-connector-java-5.1.22-bin.jar檔案拷貝至/usr/lib/hive/lib下。
B:MySQL管理員需要用hive-schema-0.9.0.mysql.sql來建立初始資料庫:
mysql –u root –p mysql > CREATE DATABASE hivemetastoredb; mysql > USE hivemetastoredb; mysql > SOURCE /usr/lib/hive/scripts/metastore/upgrade/mysql/ hive-schema-0.9.0.mysql.sql; mysql > CREATE USER ‘hive’@’%’ IDENTIFIED BY ‘hive’; mysql > CREATE ALL PRIVILEGES ON hivemetastoredb.* TO ‘hive’@’%’ WITH GRANT OPTION; mysql > FLUSH PRIVILEGES; mysql > QUIT;
C:配置mysql用utf8作為預設的字元編碼。
$ vim /etc/my.cnf 在[mysqld]下加入 Default-character-set=utf8
這是因為,impala去連線mysql時所用到的連線字串為:URL=”jdbc:mysql://localhost:3306/hivemetastoredb?useUnicode=true&characterEncoding=UTF-8”,它預設用的就是utf8。
二、新增Impala服務
進入cloudera manager管理介面,新增impala服務,點選impala,點選配置,可看到如下介面:
在這個配置裡面,需要配置如下引數:
Property | Value |
DataNode Local Path Access Users dfs.block.local-path-access.user | impala |
DataNode Data Directory Permissions dfs.datanode.data.dir.perm | 755 |
Enable HDFS Block Metadata API dfs.datanode.hdfs-blocks-metadata.enabled | true |
Enable HDFS Short Circuit Read dfs.client.read.shortcircuit | true |
Hive Metastore的配置如上圖所示,資料庫連線密碼:hive。
三、配置好impala後,點選重新啟動impala。啟動成功後可以看到如下介面:
兩個服務都完成,才算impala啟動成功。
配置Hue Beeswax連線到Impala。
這個配置是為了讓Hue Beeswax網站介面來執行Impala語句。修改/etc/hue/hue.ini,如下內容:
[beeswax] beeswax_server_host=192.168.20.195 beeswax_server_port=8003
重啟Hue服務。至此,impala這個服務也算是正常啟動了。
最後說明一下,這次配置遇到的問題及解決方法。
問題一:無法安裝hadoop-hdfs包。
如下圖所示:
圖中說明的錯誤是:事務驗證出錯,後面的資訊顯示了是版本衝突問題。也就是說,本來電腦裡面已經有裝了hadoop-1.0.3現在和cloudera的hadoop-hdfs-2.0.0衝突,導致hadoo-hdfs無法安裝,也就使得安裝失敗,又得重新來一次了,悲劇啊。
解決問題,我找到了系統裡安裝hadoop-1.0.3的所有包,然後把它們全部刪掉,包括安裝的目錄。
$ rpm –qa | grep –i hadoop-1.0.3 hadoop-1.0.3+20.38283-1.el6.x86_64 $ rpm –ql hadoop-1.0.3+20.38283-1.el6.x86_64(查詢安裝的位置) $ rpm –e hadoop-1.0.3+20.38283-1.el6.x86_64(解除安裝)
解除安裝過程中,可能會有包依賴,沒關係,繼續按照上述方法把他們全部刪光,重新安裝就行啦。
問題二:啟動impala時,impala daemon無法啟動,檢視日誌出現如下問題。
這個問題,說是連線到mysql被禁止,但是我用java自己做了個程式去連線mysql沒有問題,很奇怪,
javax.jdo.JDOFatalDataStoreException: Access denied for user ‘hive’@’localhost’ (using password: YES),最主要是這句話,我本來連線資料庫是,用root登入mysql建立了個新使用者hive,然後不使用密碼,同時在impala中的配置目錄裡,預設資料庫使用者hive登入也是不需要密碼的,但是卻始終連不上,後來經過分析這句話,using password:YES,也就是說,本來不需要密碼,你卻用了密碼登陸到mysql,這就有問題了,也就是說,雖然配置裡的密碼是空的,但是impala預設還是以有密碼的形式登入到mysql,這樣連線就一直被禁止了。解決的方案是:刪掉hive使用者,建立一個使用者名稱和密碼都是hive的使用者接著,把配置裡密碼也輸入hive,問題終於解決了。
—————————————————————————————————————————————————————-
用線上安裝的方式, 需要依賴於外部網路, 等待時間夠長的, 不利於重複部署. 用tarball的方式重新部署了一下. 牽扯到以前是root使用者做的, 本次按要求用非root使用者遇到了些許可權控制方面的問題
統一說明
部署:
ip | Hostname | 安裝元件 |
10.0.0.123 | Hadoop-master | -namenode, JobTracker,datanode,taskTracker -hbase-master,hbase-thrift -secondarynamenode -zookeeper-server |
10.0.0.125 | Hadoop-lave | -datanode,taskTracker -hbase-regionServer -zookeeper-server
|
下載
從https://ccp.cloudera.com/display … wnloadable+Tarballs下載需要的元件
hadoop,hbase,Hive,zookeeper
http://archive.cloudera.com/cdh/3/hadoop-0.20.2-cdh3u5.tar.gz
http://archive.cloudera.com/cdh/3/zookeeper-3.3.5-cdh3u5.tar.gz
http://archive.cloudera.com/cdh/3/hive-0.7.1-cdh3u5.tar.gz
http://archive.cloudera.com/cdh/3/hbase-0.90.6-cdh3u5.tar.gz
將壓縮包放到/hadoop/cdh3中去.
計劃如下
目錄 | 所有者 | 許可權 | |
/hadoop/cdh3 | hadoop | 755 | Hadoop及其元件的執行環境 |
/hadoop/data | hadoop | 755 | 見下 |
/hadoop/data/hdfs | hadoop | 700 | 資料節點存放資料的地方, 後續由hdfs-site.xml中的dfs.data.dir指定 |
/hadoop/data/storage | hadoop | 777 | 所有上傳到Hadoop的檔案的存放目錄,所以要確保這個目錄足夠大後續由hadoop.tmp.dir 指定 |
使用者名稱 | Home | 用途 |
hadoop | /home/hadoop | [1]用於啟動停止hadoop等維護 [2] /hadoop/data/hdfs目錄的700許可權擁有者. 也可以另選使用者 |
安裝過程
[1]下載JDK
此時選的是jdk1.6.0_43
http://www.oracle.com/technetwork/java/javase/downloads/jdk6downloads-1902814.html
Linux x64 68.7 MB jdk-6u43-linux-x64.bin
放到/usr/local/share/下並執行 ./ jdk-6u43-linux-x64.bin
然後設定JAVA_HOME及PATH環境變數,注意PATH要增加, 不要覆蓋
root@hadoop-master:~# which java
/usr/local/share/jdk1.6.0_43/bin/java
root@hadoop-master:~# echo $JAVA_HOME
/usr/local/share/jdk1.6.0_43
master與slave都要安裝, 為了配置方便拷貝, 一定給要一樣的目錄
[2]建立hadoop操作使用者
root@hadoop-master:/hadoop/cdh3/hadoop-0.20.2-cdh3u5/bin# useradd hadoop -m root@hadoop-master:/hadoop/cdh3/hadoop-0.20.2-cdh3u5/bin# su – hadoop $ bash hadoop@hadoop-master:~$ hadoop@hadoop-master:~$ pwd /home/hadoop hadoop@hadoop-master:~$ ll total 28 drwxr-xr-x 3 hadoop hadoop 4096 2013-03-07 05:03 ./ drwxr-xr-x 4 root root 4096 2013-03-07 05:02 ../ -rw-r–r– 1 hadoop hadoop 220 2011-05-18 03:00 .bash_logout -rw-r–r– 1 hadoop hadoop 3353 2011-05-18 03:00 .bashrc -rw-r–r– 1 hadoop hadoop 179 2011-06-22 15:51 examples.desktop -rw-r–r– 1 hadoop hadoop 675 2011-05-18 03:00 .profile
|
執行ssh授信 hadoop@hadoop-master:~$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/hadoop/.ssh/id_rsa): Created directory ‘/home/hadoop/.ssh’. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/hadoop/.ssh/id_rsa. Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub. The key fingerprint is: 17:cc:2b:9c:81:5b:48:53:ee:d6:35:bc:1b:0f:9a:14 hadoop@hadoop-master The key’s randomart image is: +–[ RSA 2048]—-+ | o.. | | . = o . | | o + E + | | = + = o | | . S = + | | . + o = | | o . . | | | | | +—————–+ hadoop@hadoop-master:~$ hadoop@hadoop-master:~$ cd .ssh hadoop@hadoop-master:~/.ssh$ ll total 16 drwxr-xr-x 2 hadoop hadoop 4096 2013-03-07 05:04 ./ drwxr-xr-x 3 hadoop hadoop 4096 2013-03-07 05:04 ../ -rw——- 1 hadoop hadoop 1675 2013-03-07 05:04 id_rsa -rw-r–r– 1 hadoop hadoop 402 2013-03-07 05:04 id_rsa.pub hadoop@hadoop-master:~/.ssh$ cat id_rsa.pub >> authorized_keys
|
在hadoop-slave新增hadoop使用者, 使用者名稱要與master相同
然後將master的id_rsa.pub 追加到slave機器的/home/hadoop/.ssh/authorized_keys中 到此, master應該可以ssh免密碼登入slave了 |
[3]安裝hadoop-0.20.2-cdh3u5
解壓縮:
cd /hadoop/cdh3
tar zxvf hadoop-0.20.2-cdh3u5.tar.gz
修改配置檔案
cdh3hadoop-0.20.2-cdh3u5confcore-site.xml
<?xml version=”1.0″?> <!– Put site-specific property overrides in this file. –> <configuration> |
cdh3hadoop-0.20.2-cdh3u5confhadoop-env.sh
將# export JAVA_HOME=/usr/lib/j2sdk1.6-sun |
cdh3hadoop-0.20.2-cdh3u5confhdfs-site.xml
<?xml version=”1.0″?> <!– Put site-specific property overrides in this file. –> <configuration> |
cdh3hadoop-0.20.2-cdh3u5confmapred-site.xml
<?xml version=”1.0″?> <!– Put site-specific property overrides in this file. –> <configuration> |
cdh3hadoop-0.20.2-cdh3u5confmasters
hadoop-master |
cdh3hadoop-0.20.2-cdh3u5confslaves
hadoop-slave |
Hadoop使用者下建立目錄 sudo mkdir -p /hadoop/data/storage sudo mkdir -p /hadoop/data/hdfs sudo chmod 700 /hadoop/data/hdfs sudo chown -R hadoop:hadoop /hadoop/data/hdfs sudo chmod 777 /hadoop/data/storage sudo chmod o+t /hadoop/data/storage
Hadoop使用者下執行格式化 |
啟動hadoop
hadoop@hadoop-master:~$ cd /hadoop/cdh3/hadoop-0.20.2-cdh3u5/bin hadoop@hadoop-master:/hadoop/cdh3/hadoop-0.20.2-cdh3u5/bin$ ./start-all.sh starting namenode, logging to /mnt/hgfs/hadoop/cdh3/hadoop-0.20.2-cdh3u5/bin/../logs/hadoop-hadoop-namenode-hadoop-master.out hadoop-slave: starting datanode, logging to /mnt/hgfs/hadoop/cdh3/hadoop-0.20.2-cdh3u5/bin/../logs/hadoop-hadoop-datanode-hadoop-slave.out hadoop-master: starting secondarynamenode, logging to /mnt/hgfs/hadoop/cdh3/hadoop-0.20.2-cdh3u5/bin/../logs/hadoop-hadoop-secondarynamenode-hadoop-master.out starting jobtracker, logging to /mnt/hgfs/hadoop/cdh3/hadoop-0.20.2-cdh3u5/bin/../logs/hadoop-hadoop-jobtracker-hadoop-master.out hadoop-slave: starting tasktracker, logging to /mnt/hgfs/hadoop/cdh3/hadoop-0.20.2-cdh3u5/bin/../logs/hadoop-hadoop-tasktracker-hadoop-slave.out
|
檢視啟動結果 hadoop@hadoop-master:/hadoop/cdh3/hadoop-0.20.2-cdh3u5/bin$ jps 5759 SecondaryNameNode 5462 NameNode 5832 JobTracker 5890 Jps hadoop@hadoop-master:/hadoop/cdh3/hadoop-0.20.2-cdh3u5/bin$
|
—————————————————————————————————————————————-
對於Yum,Rpm的方式就不詳細介紹了,下面總體介紹一下:
Redhat/Centos系列可以下載rpm包安裝,也可以配置repo,使用Yum方式一鍵安裝:
Redhat/Centos/Oracle 5
wget http://archive.cloudera.com/cdh4/redhat/5/x86_64/cdh/cdh4-repository-1-0.noarch.rpm sudo rpm --import http://archive.cloudera.com/cdh4/redhat/5/x86_64/cdh/RPM-GPG-KEY-cloudera
Redhat/Centos 6 wget http://archive.cloudera.com/cdh4/redhat/6/x8664/cdh/cdh4- repository-1-0.noarch.rpm sudo rpm –import http://archive.cloudera.com/cdh4 … PM-GPG-KEY-cloudera
然後安裝各元件:
$ sudo yum install hadoop-yarn-resourcemanager $ sudo yum install hadoop-hdfs-namenode $ sudo yum install hadoop-hdfs-secondarynamenode $ sudo yum install hadoop-yarn-nodemanager hadoop-hdfs-datanode hadoop-mapreduce $ sudo yum install hadoop-mapreduce
—————————————————————————————————————————————-
CDH5已經使用了Hadoop2.2.0,我們介紹一下如何手動安裝:
首先環境要求
JDK1.7_u25+
Maven3.0.5
protoc2.5
cmake
ant
zlib1g-dev
在安裝完protocbuf後無法正常執行protoc命令,報錯
protoc: error while loading shared libraries: libprotoc.so.8: cannot open shared object file: No such file or directory
解決方案是在make install後再執行一句sudo ldconfig
修改配置檔案
etc/hadoop/core-site.xml
<property> <name>fs.defaultFS</name> <value>hdfs://localhost</value> </property>
etc/hadoop/hdfs-site.xml
<property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/username/src/cdh5/hadoop/hdfs</value> </property> <property> <name>dfs.namenode.http-address</name> <value>localhost:50070</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>localhost:50090</value> </property>
etc/hadoop/yarn-site.xml
<property> <name>yarn.resourcemanager.hostname</name> <value>localhost</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property>
然後format,啟動start-all.sh 啟動偽分散式模式碰到的第一個問題是找不到JAVA_HOME 原因是啟動命令呼叫sbin/slaves.sh指令碼,這個指令碼中有使用ssh遠端呼叫其他機器的命令 在這種情況下bashrc中的設定環境變數的語句沒有被執行,原因是bashrc中第一句語句([ -z "$PS1" ] && return)會判斷呼叫模式是否是互動式模式,如果是非互動式模式則直接退出,所以寫在下面的語句都沒有被執行,解決方法有兩個 1.是把設定JAVA_HOME的語句寫在bashrc檔案的最前面 2.是修改etc/hadoop/hadoop-evn.sh中的export JAVA_HOME=${JAVA_HOME},不要使用系統的環境變數賦值,直接改成絕對路徑 修改完後再次啟動成功 使用jps會看到所有的程式 3536 ResourceManager 3116 DataNode 2900 NameNode 3378 SecondaryNameNode 3755 NodeManager 2168 Jps 使用hadoop fs -ls 檢視檔案系統的時候會遇到報錯 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable 原因是缺少libhadoop.so檔案 在src目錄或者hadoop-common子專案中重新build,命令:mvn package -DskipTests -Pdist,native,docs -Dtar 再次遇到報錯[ERROR] class file for org.mortbay.component.AbstractLifeCycle not found 這次是遇到BUG了按照https://issues.apache.org/jira/browse/HADOOP-10110官方說明在hadoop-common-project/hadoop-auth/pom.xml檔案中新增
<dependency> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-util</artifactId> <scope>test</scope> </dependency>
再次編譯遇到報錯Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.6:run (make) on projecthadoop-common:
這是沒有安裝zlib1g-dev的關係,這個可以 使用apt-get安裝
最後把生成的.so檔案全部拷貝到lib/native/目錄下,再次執行hadoop fs -ls沒有報錯資訊
來自群組: Hadoop技術組
相關文章
- 跟我一起hadoop(1)-hadoop2.6安裝與使用Hadoop
- 搭建hadoop2/CDH4叢集Hadoop
- 跟我一起學docker(八)--DockerfileDocker
- 跟我一起學docker(一)--認識Docker
- 跟我一起學Redis之Redis概述Redis
- 跟我一起梳理MongoDB基本知識MongoDB
- hadoop-2.5.0-cdh5.3.6叢集搭建HadoopH5
- Hadoop-2.6.0-cdh5.7.0安裝詳解HadoopH5
- 跟我一起學 Laravel-EloquentORM 基礎部分LaravelORM
- 跟我一起學 Laravel-EloquentORM 高階部分LaravelORM
- CDH impala for Apache HADOOP 安裝編譯步驟.ApacheHadoop編譯
- CDH版Hadoop-zookeeper-hbase-spark安裝文件HadoopSpark
- CDH版本大資料叢集下搭建Avro(hadoop-2.6.0-cdh5.5.4.gz + avro-1.7.6-cdh5.5.4.tar.gz的搭建)...大資料VRHadoopH5
- 跟我一起學Knative(1)--Knative 簡介
- 跟我一起寫shell補全指令碼(Bash篇)指令碼
- 跟我一起學 Go 系列:gRPC 攔截器GoRPC
- 跟我一起寫shell補全指令碼(Zsh篇)指令碼
- 跟我一起部署和定製 CNPM——基礎部署NPM
- 程式碼複審1234跟我一起來
- hadoop2.6.0-cdh5.7.0編譯,支援snappy、bzip2本地壓縮HadoopH5編譯APP
- Hadoop CDH版本安裝和啟動(CentOS7)HadoopCentOS
- 離線部署 CDH 5.12.1 及使用 CDH 部署 Hadoop 大資料平臺叢集服務Hadoop大資料
- 跟我一起學.NetCore之日誌(Log)模型核心NetCore模型
- 跟我一起學Knative(6)--部署gRPC服務RPC
- 跟我一起剖析 Java 併發原始碼之 UnsafeJava原始碼
- 跟我一起學Go系列:gRPC 入門必備GoRPC
- 跟我一起學習C++ 之 初識C++C++
- 跟我一起美化你的redhat8的gnome(轉)Redhat
- CDH叢集機器,安裝多個CDH版,會出現命令找不到,如hadoop,hdfs等等Hadoop
- Linux&&Hadoop2.x下編譯hive1.1.0-cdh5.7.0與配置安裝實戰LinuxHadoop編譯HiveH5
- 跟我一起學.NetCore之配置變更監聽NetCore
- 跟我一起夯實程式設計基礎 - 字元編碼程式設計字元
- 跟我一起學.NetCore之MediatR好像有點火NetCore
- 跟我一起學.NetCore之路由的最佳實現NetCore路由
- 跟我一起學docker(15)--監控日誌和日誌管理Docker
- 跟我一起學.NetCore之WebApi介面裸奔有風險(Jwt)NetCoreWebAPIJWT
- 跟我一起部署和定製 CNPM——自定義包儲存層NPM
- 跟我一起學習C++ 之 初識名稱空間C++