CDH安裝


離線安裝Cloudera Manager 5和CDH5(最新版5.1.3) 完全教程

關於CDH和Cloudera Manager

CDH (Cloudera's Distribution, including Apache Hadoop),是Hadoop眾多分支中的一種,由Cloudera維護,基於穩定版本的Apache Hadoop構建,並集成了很多補丁,可直接用於生產環境。

Cloudera Manager則是為了便於在集群中進行Hadoop等大數據處理相關的服務安裝和監控管理的組件,對集群中主機、Hadoop、Hive、Spark等服務的安裝配置管理做了極大簡化。

系統環境

    1. 實驗環境: Mac下VMware虛擬機
    2. 操作系統: CentOS 6.5 x64 (至少內存2G以上,這里內存不夠的同學建議還是整幾台真機配置比較好,將CDH的所有組件全部安裝會占用很多內存,我已開始設置的虛擬機內存是1G,安裝過程中直接卡死了)
    3.  Cloudera Manager:5.1.3
    4.  CDH: 5.1.3

安裝說明

官方參考文檔:
http://www.cloudera.com/content/cloudera/en/documentation/cloudera-manager/v5-latest/Cloudera-Manager-Installation-Guide/cm5ig_install_path_C.html

官方共給出了3中安裝方式:第一種方法必須要求所有機器都能連網,由於最近各種國外的網站被牆的厲害,我嘗試了幾次各種超時錯誤,巨耽誤時間不說,一旦失敗,重裝非常痛苦。第二種方法下載很多包。第三種方法對系統侵入性最小,最大優點可實現全離線安裝,而且重裝什么的都非常方便。后期的集群統一包升級也非常好。這也是我之所以選擇離線安裝的原因。

相關包的下載地址

Cloudera Manager下載地址:
http://archive.cloudera.com/cm5/cm/5/cloudera-manager-el6-cm5.1.3_x86_64.tar.gz,
下載信息:
http://www.cloudera.com/content/cloudera/en/documentation/cloudera-manager/v5-latest/Cloudera-Manager-Version-and-Download-Information/Cloudera-Manager-Version-and-Download-Information.html#cmvd_topic_1

CDH安裝包地址:http://archive.cloudera.com/cdh5/parcels/latest/,由於我們的操作系統為CentOS6.5,需要下載以下文件:

    1.  CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel
    2.  CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel.sha1
    3.  manifest.json

注意:與CDH4的不同,原來安裝CDH4的時候還需要下載IMPALA、Cloudera Search(SOLR),CDH5中將他們包含在一起了,所以只需要下載一個CDH5的包就可以了。

准備工作:系統環境搭建

以下操作均用root用戶操作。

如果用的最小化Centos7安裝 需安裝幾個命令

 yum -y install psmisc gcc ntp net-tools wget  vim

 

1. 網絡配置(所有節點

vi /etc/sysconfig/network修改hostname:

NETWORKING=yes

HOSTNAME=n1

通過service network restart重啟網絡服務生效。 

vi /etc/hosts,修改ip與主機名的對應關系

192.168.1.106   n1

192.168.1.107   n2

192.168.1.108   n3

注意:這里需要將每台機器的ip及主機名對應關系都寫進去,本機的也要寫進去,否則啟動Agent的時候會提示hostname解析錯誤。

關閉防火牆

systemctl stop firewalld.service
systemctl disable firewalld.service
修改主機名
hostnamectl set-hostname n2

2.打通SSH,設置ssh無密碼登陸(所有節點)

在主節點上執行ssh-keygen -t rsa一路回車,生成無密碼的密鑰對。

將公鑰添加到認證文件中:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys,並設置authorized_keys的訪問權限:chmod 600 ~/.ssh/authorized_keys。

scp文件到所有datenode節點:

scp ~/.ssh/authorized_keys root@n2:~/.ssh/        如果其他節點沒有ssh目錄  直接把目錄復制過去即可

測試:在主節點上ssh n2,正常情況下,不需要密碼就能直接登陸進去了。

3.安裝Oracle的Java(所有節點)

CentOS,自帶OpenJdk,不過運行CDH5需要使用Oracle的Jdk,需要Java 7的支持。

由於使用的最小化系統,Centos7中並沒有然后java自帶包,這里必須注意。。即是沒有 也用yum -y install java  系統會自動解決依賴性關系,這點很重要,如果單用官網RPM包安裝java 后期會有很多日志報錯,缺少python之類的包,下圖就是 提前用yum安裝的java 。然后把java包安裝

  

因為是用yum裝的  用java -version可以查看版本。但是javac命令確不能用 所以在這把那些java的包卸載 ,使用rpm -e --nodeps 包名卸載之。 只剩下圖2個包即可  (自己的笨辦法,在這里吃了很多虧)

   

卸載自帶的OpenJdk,使用rpm -qa | grep java查詢java相關的包,

Oracle的官網下載jdk的rpm安裝包,並使用rpm -ivh 包名安裝之。  這里我下載的jdk-8u77-linux-x64.rpm

配置環境變量

export JAVA_HOME=/usr/java/jdk1.8.0_77
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/jre/lib/dt.jar:$JAVA_HOME/jre/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

 

然后source 讓其立即生效

以上配置都是所有節點都需要配置。可以在主節點配置好。scp到其他節點 ,快速配置

4.安裝配置MySql(主節點)

CentOS 7的yum源中貌似沒有正常安裝mysql時的mysql-sever文件,需要去官網上下載

1
2
3
# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
# rpm -ivh mysql-community-release-el7-5.noarch.rpm
# yum install mysql-community-server

成功安裝之后重啟mysql服務

1
# service mysqld restart
Centos7中開機啟動  systemctl enable mysqld.service
 (如需關閉開啟自啟動 systemcal disable mysqld.server 即可      systemctl list-unit-files 查看開機啟動服務)

service mysqld start啟動mysql服務,並根據提示設置root的初試密碼:mysqladmin -u root password 'xxxx'。

mysql -uroot -pxxxx進入mysql命令行,創建以下數據庫:

#hive

create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

#activity monitor

create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

設置root授權訪問以上所有的數據庫:

#授權root用戶在主節點擁有所有數據庫的訪問權限

 

grant all privileges on *.* to'root'@'n1'identified by'123'with grant option;  (需要一下2條命令,不然后面驗證數據庫 就會出錯)

grant all privileges on *.* to 'root'@'%' identified by '123' with grant option 

flush privileges;

5.關閉防火牆和SELinux

注意: 需要在所有的節點上執行,因為涉及到的端口太多了,臨時關閉防火牆是為了安裝起來更方便,安裝完畢后可以根據需要設置防火牆策略,保證集群安全。

關閉防火牆:

 


systemctl stop firewalld.service #停止firewall
 
systemctl disable firewalld.service #禁止firewall開機啟動 

 

修改/etc/selinux/config 下的 SELINUX=disabled (重啟后永久生效)

6.所有節點配置NTP服務

集群中所有主機必須保持時間同步,如果時間相差較大會引起各種問題。具體思路如下:

master節點作為ntp服務器與外界對時中心同步時間,隨后對所有datanode節點提供時間同步服務。

所有datanode節點以master節點為基礎同步時間。

所有節點安裝相關組件:yum install ntp。完成后,配置開機啟動:chkconfig ntpd on,檢查是否設置成功:chkconfig --list ntpd其中2-5為on狀態就代表成功。

rpm 先查詢本機是否已經有ntp包。 

如果有 /bin/systemctl restart ntpd.service 啟動服務 並查看運行狀況

主節點配置

在配置之前,先使用ntpdate手動同步一下時間,免得本機與對時中心時間差距太大,使得ntpd不能正常同步。這里選用 ntpdate -u s2m.time.edu.cn

ntp服務只有一個配置文件,配置好了就OK。這里只給出有用的配置,不需要的配置都用#注掉,這里就不在給出:

driftfile /var/lib/ntp/drift

restrict 127.0.0.1

restrict -6 ::1

restrict default nomodify notrap

server s2m.time.edu.cn

includefile /etc/ntp/crypto/pw

keys /etc/ntp/keys

配置文件完成,保存退出,啟動服務,執行如下命令:service ntpd start

檢查是否成功,用ntpstat命令查看同步狀態,出現以下狀態代表啟動成功:

synchronised to NTP server () at stratum 2

time correct to within 74 ms

polling server every 128 s

如果出現異常請等待幾分鍾,一般等待5-10分鍾才能同步。

配置ntp客戶端(所有datanode節點)

driftfile /var/lib/ntp/drift

restrict 127.0.0.1

restrict -6 ::1

restrictdefault kod nomodify notrap nopeer noquery

restrict -6 default kod nomodify notrap nopeer noquery

server n1  

includefile /etc/ntp/crypto/pw

keys /etc/ntp/keys

ok保存退出,請求服務器前,請先使用ntpdate手動同步一下時間:ntpdate -u n1 (主節點ntp服務器)

這里可能出現同步失敗的情況,請不要着急,一般是本地的ntp服務器還沒有正常啟動,一般需要等待5-10分鍾才可以正常同步。啟動服務:service ntpd start

因為是連接內網,這次啟動等待的時間會比master節點快一些,但是也需要耐心等待一會兒。

正式開工

安裝Cloudera Manager Server 和Agent

主節點解壓安裝

cloudera manager的目錄默認位置在/opt下,解壓:tar xzvf cloudera-manager*.tar.gz將解壓后的cm-5.1.3和cloudera目錄放到/opt目錄下。

Cloudera Manager 5建立數據庫

首先需要去MySql的官網下載JDBC驅動,http://dev.mysql.com/downloads/connector/j/,解壓后,找到mysql-connector-java-5.1.33-bin.jar,放到/opt/cm-5.1.3/share/cmf/lib/中。

在主節點初始化CM5的數據庫:

/opt/cm-5.1.3/share/cmf/schema/scm_prepare_database.sh mysql cm -hlocalhost -uroot -pxxxx --scm-host localhost scm scm scm

Agent配置

修改/opt/cm-5.1.3/etc/cloudera-scm-agent/config.ini中的server_host為主節點的主機名。

同步Agent到其他節點

scp -r /opt/cm-5.1.3 root@n2:/opt/

在所有節點創建cloudera-scm用戶

useradd --system --home=/opt/cm-5.5.0/run/cloudera-scm-server/ --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm

准備Parcels,用以安裝CDH5

CHD5相關的Parcel包放到主節點的/opt/cloudera/parcel-repo/目錄中(parcel-repo需要手動創建)。

相關的文件如下:

    1.  CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel
    2.  CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel.sha1
    3.  manifest.json

最后將CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel.sha1,重命名為CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel.sha,這點必須注意,否則,系統會重新下載CDH-5.1.3-1.cdh5.1.3.p0.12-el6.parcel文件。

相關啟動腳本

通過/opt/cm-5.5.0/etc/init.d/cloudera-scm-server start啟動服務端。

通過/opt/cm-5.5.0/etc/init.d/cloudera-scm-agent start啟動Agent服務。

我們啟動的其實是個service腳本,需要停止服務將以上的start參數改為stop就可以了,重啟是restart。

CDH5的安裝配置

Cloudera Manager Server和Agent都啟動以后,就可以進行CDH5的安裝配置了。

這時可以通過瀏覽器訪問主節點的7180端口測試一下了(由於CM Server的啟動需要花點時間,這里可能要等待一會才能訪問),默認的用戶名和密碼均為admin:

 

 

可以看到,免費版本的CM5已經沒有原來50個節點數量的限制了。

 

各個Agent節點正常啟動后,可以在當前管理的主機列表中看到對應的節點。選擇要安裝的節點,點繼續。

 

接下來,出現以下包名,說明本地Parcel包配置無誤,直接點繼續就可以了。

 

點擊,繼續,如果配置本地Parcel包無誤,那么下圖中的已下載,應該是瞬間就完成了,然后就是耐心等待分配過程就行了,大約10多分鍾吧,取決於內網網速。

 

接下來是服務器檢查,可能會遇到以下問題:

Cloudera 建議將/proc/sys/vm/swappiness 設置為0。當前設置為60。使用 sysctl 命令在運行時更改該設置並編輯/etc/sysctl.conf 以在重啟后保存該設置。您可以繼續進行安裝,但可能會遇到問題,Cloudera Manager 報告您的主機由於交換運行狀況不佳。以下主機受到影響:

通過echo 0 > /proc/sys/vm/swappiness即可解決。

 

 

接下來是選擇安裝服務:

 

 

服務配置,一般情況下保持默認就可以了(Cloudera Manager會根據機器的配置自動進行配置,如果需要特殊調整,自行進行設置就可以了):

 

接下來是數據庫的設置,檢查通過后就可以進行下一步的操作了:

 

下面是集群設置的審查頁面,我這里都是保持默認配置的:

 

終於到安裝各個服務的地方了,注意,這里安裝Hive的時候可能會報錯,因為我們使用了MySql作為hive的元數據存儲,hive默認沒有帶mysql的驅動,通過以下命令拷貝一個就行了:

cp /opt/cm-5.1.3/share/cmf/lib/mysql-connector-java-5.1.33-bin.jar /opt/cloudera/parcels/CDH-5.1.3-1.cdh5.1.3.p0.12/lib/hive/lib/   切記:給最多權限,以免發生錯誤

 

服務的安裝過程大約半小時內就可以完成:

 

安裝完成后,就可以進入集群界面看一下集群的當前狀況了。

這里可能會出現無法發出查詢:對 Service Monitor 的請求超時的錯誤提示,如果各個組件安裝沒有問題,一般是因為服務器比較卡導致的,過一會刷新一下頁面就好了:

 

測試

在集群的一台機器上執行以下模擬Pi的示例程序:

sudo -u hdfs hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 10 100

執行過程需要花一定的時間,通過YARN的后台也可以看到MapReduce的執行狀態:

說明: https://images0.cnblogs.com/blog/312243/201410/130121439669223.png

MapReduce執行過程中終端的輸出如下:

Number of Maps  = 10

Samples per Map = 100

Wrote input for Map #0

Wrote input for Map #1

Wrote input for Map #2

Wrote input for Map #3

Wrote input for Map #4

Wrote input for Map #5

Wrote input for Map #6

Wrote input for Map #7

Wrote input for Map #8

Wrote input for Map #9

Starting Job

14/10/13 01:15:34 INFO client.RMProxy: Connecting to ResourceManager at n1/192.168.1.161:8032

14/10/13 01:15:36 INFO input.FileInputFormat: Total input paths to process : 10

14/10/13 01:15:37 INFO mapreduce.JobSubmitter: number of splits:10

14/10/13 01:15:39 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1413132307582_0001

14/10/13 01:15:40 INFO impl.YarnClientImpl: Submitted application application_1413132307582_0001

14/10/13 01:15:40 INFO mapreduce.Job: The url to track the job: http://n1:8088/proxy/application_1413132307582_0001/

14/10/13 01:15:40 INFO mapreduce.Job: Running job: job_1413132307582_0001

14/10/13 01:17:13 INFO mapreduce.Job: Job job_1413132307582_0001 running in uber mode : false

14/10/13 01:17:13 INFO mapreduce.Job:  map 0% reduce 0%

14/10/13 01:18:02 INFO mapreduce.Job:  map 10% reduce 0%

14/10/13 01:18:25 INFO mapreduce.Job:  map 20% reduce 0%

14/10/13 01:18:35 INFO mapreduce.Job:  map 30% reduce 0%

14/10/13 01:18:45 INFO mapreduce.Job:  map 40% reduce 0%

14/10/13 01:18:53 INFO mapreduce.Job:  map 50% reduce 0%

14/10/13 01:19:01 INFO mapreduce.Job:  map 60% reduce 0%

14/10/13 01:19:09 INFO mapreduce.Job:  map 70% reduce 0%

14/10/13 01:19:17 INFO mapreduce.Job:  map 80% reduce 0%

14/10/13 01:19:25 INFO mapreduce.Job:  map 90% reduce 0%

14/10/13 01:19:33 INFO mapreduce.Job:  map 100% reduce 0%

14/10/13 01:19:51 INFO mapreduce.Job:  map 100% reduce 100%

14/10/13 01:19:53 INFO mapreduce.Job: Job job_1413132307582_0001 completed successfully

14/10/13 01:19:56 INFO mapreduce.Job: Counters: 49

    File System Counters

        FILE: Number of bytes read=91

        FILE: Number of bytes written=1027765

        FILE: Number ofread operations=0

        FILE: Number of large read operations=0

        FILE: Number ofwrite operations=0

        HDFS: Number of bytes read=2560

        HDFS: Number of bytes written=215

        HDFS: Number ofread operations=43

        HDFS: Number of large read operations=0

        HDFS: Number ofwrite operations=3

    Job Counters

        Launched map tasks=10

        Launched reduce tasks=1

        Data-local map tasks=10

        Total time spent by all maps in occupied slots (ms)=118215

        Total time spent by all reduces in occupied slots (ms)=11894

        Total time spent by all map tasks (ms)=118215

        Total time spent by all reduce tasks (ms)=11894

        Total vcore-seconds taken by all map tasks=118215

        Total vcore-seconds taken by all reduce tasks=11894

        Total megabyte-seconds taken by all map tasks=121052160

        Total megabyte-seconds taken by all reduce tasks=12179456

    Map-Reduce Framework

        Map input records=10

        Map output records=20

        Map output bytes=180

        Map output materialized bytes=340

        Input split bytes=1380

        Combine input records=0

        Combine output records=0

        Reduce input groups=2

        Reduce shuffle bytes=340

        Reduce input records=20

        Reduce output records=0

        Spilled Records=40

        Shuffled Maps =10

        Failed Shuffles=0

        Merged Map outputs=10

        GC time elapsed (ms)=1269

        CPU time spent (ms)=9530

        Physical memory (bytes) snapshot=3792773120

        Virtual memory (bytes) snapshot=16157274112

        Total committed heap usage (bytes)=2856624128

    Shuffle Errors

        BAD_ID=0

        CONNECTION=0

        IO_ERROR=0

        WRONG_LENGTH=0

        WRONG_MAP=0

        WRONG_REDUCE=0

    File Input Format Counters

        Bytes Read=1180

    File Output Format Counters

        Bytes Written=97

Job Finished in 262.659 seconds

Estimated value of Pi is 3.14800000000000000000

檢查Hue

首次登陸Hue會讓設置一個初試的用戶名和密碼,設置好,登陸到后台,會做一次檢查,一切正常后會提示:

說明: https://images0.cnblogs.com/blog/312243/201410/130130098264300.png

到這里表明我們的集群可以使用了。

 

如上如果安裝Oozie失敗:

出現  

 

 

Java Connect to database Error:ClassNotFoundException:com.mysql.jdbc.Driver 錯誤  

需要自己先創建一個oozie數據庫
 $ mysql -u root -p  
 Enter password: ******  
  
 mysql> create database oozie;  
Query OK, 1 row affected (0.03 sec)  
 
mysql>  grant all privileges on oozie.* to 'oozie'@'localhost' identified by 'oozie';  
Query OK, 0 rows affected (0.03 sec)  
 
mysql>  grant all privileges on oozie.* to 'oozie'@'%' identified by 'oozie';  
Query OK, 0 rows affected (0.03 sec)  
並刷新數據庫
把下載好的mysql的jdbc驅動復制到/var/lib/oozie/    這里我給了 文件777權限 防止出錯
cp /home/mysql-connector-java-5.1.38/mysql-connector-java-5.1.38-bin.jar /var/lib/oozie/  
 chmod 777 mysql-connector-java-5.1.38-bin.jar   
然后在重試 web頁面 安裝服務 成功安裝

 

hadoop2.6完全分布式安裝文檔

 ssh和jdk的配置上面參照即可  

這里主要列出配置文件的內容

 

useradd hadoop (創建用戶)

passwd hadoop (設置密碼,為簡單起見,3台機器上的hadoop密碼最好設置成一樣,比如hadoop123)

為了方便,建議將hadoop加入root用戶組,操作方法:

先以root身份登錄,然后輸入

usermod -g root hadoop ,執行完后hadoop即歸屬於root組了,可以再輸入

id hadoop 查看輸出驗證一下,如果看到類似下面的輸出:

uid=502(hadoop) gid=0(root) 組=0(root)

就表示OK了 


 

http://mirrors.cnnic.cn/apache/hadoop/common/ 下載,本教程選擇的是 2.6.0 版本,下載時請下載 hadoop-2.x.y.tar.gz這個格式的文件,這是編譯好的,另一個包含 src 的則是 Hadoop 源代碼,需要進行編譯才可使用。

下載時強烈建議也下載 hadoop-2.x.y.tar.gz.mds 這個文件,該文件包含了檢驗值可用於檢查 hadoop-2.x.y.tar.gz 的完整性,否則若文件發生了損壞或下載不完整,Hadoop 將無法正常運行。

下載后使用MD5校驗是否完整

 

 

這里我是下載的hadoop2.6 並解壓放置到/usr/local/hadoop  

    1. tar -zxf hadoop-2.6.0.tar.gz -C /usr/local # 解壓到/usr/local中
    2. cd /usr/local/
    3. mv ./hadoop-2.6.0/ ./hadoop # 將文件夾名改為hadoop
    4. chown -R hadoop:hadoop ./hadoop # 修改文件權限

 並檢查是否可用

    1. cd /usr/local/hadoop
    2. ./bin/hadoop version

 

1、進/usr/local/hadoop/etc/hadoop目錄中,編輯hadoop-env.sh文件,使用vim  hadoop-env.sh,修改內容如下:
     export JAVA_HOME=/usr/java/jdk1.6.0_31

2、編輯yarn-env.sh        vim  yarn-env.sh,修改內容如下:
     JAVA_HOME=/usr/java/jdk1.6.0_31

3、編輯core-site.xml,修改內容如下:  這里自行建立/home/hadoop/tmp
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
</property>

4、編輯hdfs-site.xml,編輯內容如下:
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/dfs/data</value>
</property>

5、編輯mapred-site.xml(需要復制mapred-site.xml.template,並命名為mapred-site.xml),編輯內容如下:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>n1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>n1:19888</value>
</property>

6、編輯yarn-site.xml文件,修改內容如下:
<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>
<property>
<name>yarn.resourcemanager.address</name>
<value>n1:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>n1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>n1:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>n1:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>n1:8088</value>
</property>

7、編輯slaves文件,修改內容如下:
n2
n3

8、復制hadoop2.6到另外兩個節點,

9、在master節點格式化hdfs文件
./bin/hdfs namenode -format
      成功格式化后,如下圖:
 


10、啟動hadoop
./sbin/start-all.sh
      使用jps查看運行的進程,表示master和slave節點成功運行的進程如下:
     master:
 


slave1:
 

slave2:
 


至此hadoop2.6集群搭建完成。 搭建完成后 訪問網站http://192.168.1.120:50070

 

另外也可以通過 bin/hdfs dfsadmin -report 查看hdfs的狀態報告

 

a) master(即:namenode節點)若要重新格式化,請先清空各datanode上的data目錄(最好連tmp目錄也一起清空),否則格式化完成后,啟動dfs時,datanode會啟動失敗

b) 如果覺得master機器上只運行namenode比較浪費,想把master也當成一個datanode,直接在slaves文件里,添加一行master即可

c) 設置hadoop環境變量 

export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

 

安裝HIVE項目

首先建立hive庫 

 

-- 創建 hive 數據庫

 mysql> CREATE DATABASE hive; 

-- 創建 hive 用戶,並賦予訪問 hive 數據庫的權限

mysql> GRANT ALL PRIVILEGES ON hive.*TO'hive'@'localhost' IDENTIFIED BY'hive'; 

mysql> FLUSH PRIVILEGES; 

-- 設置 binary log 的格式:

mysql>setglobal binlog_format=MIXED;

下載HIve並配置環境變量

tar xzvf hive-2.0.tar.gz -C /home/hadoop  

並mv為hive    

-- 在 .bashrc 或是 .bash_profile 文件中增加以下設置:

export HIVE_HOME=/home/hadoop/hive

export PATH=$PATH:$HIVE_HOME/bin 

修改配置文件

cd /home/hadoop/
cp hive-default.xml.template hive-site.xml
cp hive-log4j.properties.template hive-log4j.propertie
配置文件修改如下
-- cat hive-1.1.0-cdh5.4.7/conf/hive-site.xml
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration><property><name>hive.server2.thrift.port</name><value>10000</value></property><property><name>hive.server2.thrift.bind.host</name><value>n1</value></property><property><name>hive.server2.authentication</name><value>NONE</value><description>
        Client authentication types.
           NONE: no authentication check
           LDAP: LDAP/AD based authentication
           KERBEROS: Kerberos/GSSAPI authentication
           CUSTOM: Custom authentication provider
                   (Use with property hive.server2.custom.authentication.class)
      </description></property><property><name>hive.server2.enable.doAs</name><value>true</value></property><property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value><description>JDBC connect string for a JDBC metastore</description></property><property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.jdbc.Driver</value><description>Driver class name for a JDBC metastore</description></property><property><name>javax.jdo.option.ConnectionUserName</name><value>hive</value><description>username to use against metastore database</description></property><property><name>javax.jdo.option.ConnectionPassword</name><value>hive</value><description>password to use against metastore database</description></property></configuration>

下載mysql jdb jar包
wget http://cdn.mysql.com//Downloads/Connector-J/mysql-connector-java-5.1.37.tar.gz 

tar xvzf mysql-connector-java-5.1.37.tar.gz 

cp mysql-connector-java-5.1.37/mysql-connector-java-5.1.37-bin.jar $HIVE_HOME/lib
在啟動hive  進入bin目錄執行hive 

 

如果這里報錯  [ERROR] Terminal initialization failed; falling back to unsupported

 

 

 

原因是hadoop目錄下存在老版本jline:

/hadoopshare/hadoop/yarn/lib:

-rw-r--r-- 1 root root   87325 Mar 10 18:10 jline-0.9.94.jar

 

解決方法是:

將hive下的新版本jline的JAR包拷貝到hadoop下:

cp /home/hive/lib/jline-2.12.jar /usr/local/hadoop/share/hadoop/yarn/lib 

並將/usr/local/hadoop/share/hadoop/yarn/lib 內的jline包改名 如下 即可

-rw-r--r-- 1 root root   87325 Mar 10 18:10 jline-0.9.94.jar.bak
-rw-r--r-- 1 root root  213854 Mar 11 22:22 jline-2.12.jar

 最后設置的環境變量為

export JAVA_HOME=/usr/java/jdk1.8.0_77
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/jre/lib/dt.jar:$JAVA_HOME/jre/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HIVE_HOME=/usr/local/hadoop/hive
export PATH=$PATH:$HIVE_HOME/bin

 

 

 

自己總結的各種小毛病處理  

在配置之前  清除服務項目安裝在哪一個文件目錄下。 這樣出了問題好排查

 

1.在對namenode格式化之前,要確保dfs.name.dir參數指定的目錄不存在。 查看配置文件
Hadoop這樣做的目的是防止錯誤地將已存在的集群格式化了
2.如果哪個服務啟動失敗就去看日志。 看是哪一步格式化錯誤了。 一般hadoop的配置文件都是其項目內的xml文件。例如 hdfs-site.xml 文件    
3.如果啟動hive失敗。首先建立hive數據,在配置文件 hive-site.xml  配置數據庫選項
 
如果在安裝的過程中出現YARN啟動服務失敗  查看日志  
例如:Name node is in safe mode 錯誤。切換到hadoop 用戶  因為這是處於安全模式。  輸入 hadoop dfsadmin -safemode leave可關閉模式
如果還是解決不了。可操作
是CDH 的BUG,需要修改文件 <CM-PATH>/lib64/cmf/agent/src/cmf/util.py

將util.py里的一行代碼:
pipe = subprocess.Popen(['/bin/bash', '-c', ". %s; %s; env" % (path, command)],
                        stdout=subprocess.PIPE, env=caller_env)

修改成:
pipe = subprocess.Popen(['/bin/bash', '-c', ". %s; %s; env | grep -v { | grep -v }" % (path, command)],
                        stdout=subprocess.PIPE, env=caller_env)

就好了
 
 
 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM