從零搭建Hadoop+Zookeeper+HBase完全分布式集群

前言

實驗室項目需要部署一個hadoop集群,雖然自己之前用虛擬機也搭建過偽分布式的hadoop集群,但那個時候也是有問題就問度娘,沒有系統整理,于是,對搭建過程也幾乎是像小白一樣懵逼~~~因此,這次記錄下整個過程,尤其是踩過的坑,方便后來自己查閱,也希望能幫助到正在搭建集群的你。

先來介紹下集群的系統配置:

  • 系統環境:Ubuntu 16.04
  • Java Jdk:1.8.0_191
  • Hadoop:2.8.5
  • Zookeeper:3.4.12
  • HBase:2.1.0

為了方便介紹,這里我以3臺服務器為例進行介紹,下面是主機的一些信息:

主機名 IP
master 10.100.200.220
slave1 10.100.200.221
slave2 10.100.200.222

為了清晰直觀,本文針對每一部分都給出了每個主機的配置清單。其中標記了為需要配置,標記了X為不需要配置。

準備工作

由于是從零開始搭建集群,所以需要做好一些前期準備工作——配置用戶和用戶組、配置主機名、安裝配置SSH、配置免密登錄SSH、關閉防火墻等。這些配置是集群搭建的最最基礎的部分,希望讀者耐心配置。

配置清單

準備工作的配置清單如下:

配置項 master slave1 slave2
配置用戶和用戶組
配置主機名
安裝配置SSH
配置免密登錄SSH
關閉防火墻

配置用戶和用戶組

搭建hadoop集群環境要求所有主機的用戶和用戶組要完全一致。配置過程如下:

  1. 新建用戶,建議用adduser命令。
    sudo adduser hadoop
    
    因為使用了sudo命令,所以要輸入當前用戶的密碼才能進行下一步的操作。配置hadoop用戶密碼需要輸入兩次密碼,然后一直按回車,最后輸入Y確定。在無密碼的情況下,應該緊接著使用passwd命令,為hadoop用戶設置密碼:
passwd hadoop
  1. 在創建hadoop用戶的同時也創建了hadoop用戶組,下面把hadoop用戶加入到hadoop用戶組。
    sudo usermod -a -G hadoop hadoop 
    
  2. 前面一個hadoop是組名,后面一個hadoop是用戶名。完成后輸入一下命令查詢結果。
    cat  /etc/group
    
  3. 然后再把hadoop用戶賦予root權限,讓他可以使用sudo命令。
    sudo vi /etc/sudoers
    
    修改文件如下:
    # User privilege specification
    root ALL=(ALL) ALL
    hadoop ALL=(ALL) ALL  # 添加這一行配置
    
    保存退出,hadoop用戶就擁有了root權限。

配置主機名

我們一開始就給出了3臺主機的主機名(master、slave1、slave2),但是默認的主機名卻是千奇百怪,因此要把原來的主機名改成我們設定的。

  1. 編輯 /etc/hostname ,把里面的內容更改為你所需要的設定的主機名。

    sudo vim /etc/hostname
    
  2. 更改hosts文件,修改(或增加)127.0.1.1后面的名稱改為設定值。

    sudo vim /etc/hosts
    
  3. 重啟服務器,更改生效。

    sudo reboot
    
  4. 驗證。重新登錄后,會發現主機名已經更改為設定值了。

    hostname
  5. 修改host文件,配置域名。編輯hosts文件:

    sudo vi /etc/hosts
    

    添加下面內容:

    10.100.200.220 master
    10.100.200.221 slave1
    10.100.200.222 slave2
    

踩坑記錄:主機名和hosts文件中設置的名稱應當保持一致,否則會產生意外的錯誤。另外,建議把/etc/hosts文件中的127.0.0.1 localhost給注釋掉。為避免表述不清,讓大家產生疑惑,直接貼出hosts文件的截圖。

hosts

安裝配置SSH

在Hadoop運行過程中,主從機之間是通過SSH進行通信的,所以需要對所有主機進行SSH的安裝和配置工作。

  1. 先更新一下apt。
    sudo apt-get update
    
  2. 接下來,安裝SSH。
    sudo apt-get install openssh-server
    
  3. 安裝完成之后,使用下面的命令來查看SSH是否安裝成功。
    ps -e | grep ssh
    
    如果有輸出就表示SSH安裝成功了。也可以使用SSH登陸本地機器來測試一下。
    ssh localhost
    

    溫馨提示:安裝好SSH之后,大家就可以使用SSH進行遠程操作了。如果是虛擬機的話,大家可能對此沒有什么感覺;但如果是物理機的話,這就十分方便了。集群中所有主機的配置只需要一臺MAC就搞定了。

配置免密登錄SSH

主機間免密登錄才能實現主機間的順暢通信,因此該環節非常重要!

  1. 在master主機上生成密鑰對。

    ssh-keygen -t rsa
    

    輸入后一直回車選擇默認即可。

    keygen
  1. 將公鑰(~/.ssh/id_rsa.pub中的內容)復制到文件authorized_keys中去。

    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    
  2. 分別在從機slave1,slave2上都進行同樣的操作,同時將兩個從機的公玥都復制到主機master的~/.ssh/authorized_keys中去。
    即將slave1和slave2 ~/.ssh/authorized_keys里面的內容添加到master上的~/.ssh/authorized_keys里面。

  3. 將master上的~/.ssh/authorized_keys通過scp命令復制到從機slave1,slave2中去。

    scp -r ~/.ssh/authorized_keys slave1:~/.ssh/ 
    scp -r ~/.ssh/authorized_keys slave2:~/.ssh/
    

或者,使用ssh-copy-id \$IPs #$IPs為所有節點地址包括自身,按照提示輸入yes 和root密碼。

  1. 驗證一下免密登錄是否成功。在master上登錄slave1、slave2(其他主機上驗證方法也是一樣的)。

    ssh slave1
    

    如果是第一次登錄,則會要求輸入密碼,但之后登錄都不再需要密碼。那么,恭喜你,這一步配置已經完美結束了!

    ssh

關閉防火墻

集群需要開放很多端口,因此,為了避免出現端口未開放的問題,我索性關閉了防火墻。我使用ufw命令關閉防火墻。

  1. 關閉防火墻
    sudo ufw disable
    
  2. 查看防火墻狀態
    sudo ufw status
    
    ufw status

正式搭建

如果你已經配置到了這一步,那么恭喜你,因為你已經完成了集群搭建工作的一大半任務了,下面,讓我們繼續剩下一小半的任務吧~

接下來的任務全部通過SSH遠程配置。

同樣,給出這一部分的配置清單:

配置項 master slave1 slave2
Java JDK
Zookeeper
Hadoop
HBase

Java JDK

Hadoop的有些計算是通過jar包進行分布式計算的。因此,安裝Hadoop前需要安裝JDK。

  1. java JDK下載傳送門

  2. 將JDK下載到本地后,通過scp命令將安裝包發送到每個主機上。

    scp jdk-8u191-linux-x64.tar.gz hadoop@10.100.200.220:~/
    
  3. 登錄master主機。

    ssh hadoop@10.100.200.220
    
  4. /usr/local/ 中建 cluster文件夾。

    mkdir /usr/local/cluster
    
  5. 進入服務器根目錄下,將jdk-8u191-linux-x64.tar.gz解壓至 /usr/local/cluster中。

    tar -zxvf ~/jdk-8u191-linux-x64.tar.gz -C /usr/local/cluster/
    
  6. 進入 /usr/local/cluster 中,為了方便日后版本的更新,這里使用軟鏈接的方法。

    cd /usr/local/cluster
    ln -s jdk1.8.0_191 java
    
  7. 進行環境變量的配置。

    sudo vi ~/.bashrc
    

    添加如下內容:

    #java
    export JAVA_HOME=/usr/local/cluster/java
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=${JAVA_HOME}/bin:$PATH
    
  8. 使環境變量立刻生效。

    source ~/.bashrc
    
  9. 驗證環境變量是否配置成功。

    java -version
    

    如果輸出如下圖所示,即代表JDK環境變量配置好了。

    java version

Zookeeper

  1. Zookeeper下載傳送門

  2. 將Zookeeper下載到本地后,通過scp命令將安裝包發送到master主機上。下面以master為例介紹安裝配置,其他的主機安裝和配置是完全一樣的。

    scp zookeeper-3.4.12.tar.gz hadoop@10.100.200.220:~/
    
  3. 進入服務器根目錄下,將zookeeper-3.4.12.tar.gz解壓至 /usr/local/cluster中。

    tar -zxvf ~/zookeeper-3.4.12.tar.gz -C /usr/local/cluster/
    
  4. 進入 /usr/local/cluster 中,為了方便日后版本的更新,這里使用軟鏈接的方法。

    cd /usr/local/cluster
    ln -s zookeeper-3.4.12 zookeeper
    
  5. 設置環境變量,在 ~/.bashrc 添加如下內容。

    #zookeeper
    export ZOOKEEPER=/usr/local/cluster/zookeeper
    export PATH=$PATH:$ZOOKEEPER/bin
    
  6. 使環境變量立刻生效。

    source ~/.bashrc
    
  7. 配置zookeeper

    • 建立數據和日志文件
      mkdir /usr/local/cluster/zookeeper/data
      mkdir /usr/local/cluster/zookeeper/logs
      
    • 進入conf目錄創建并修改zoo.cfg文件
      cp zoo_sample.cfg zoo.cfg
      
      修改后的內容為:
      # The number of milliseconds of each tick
      tickTime=2000
      # The number of ticks that the initial 
      # synchronization phase can take
      initLimit=10
      # The number of ticks that can pass between 
      # sending a request and getting an acknowledgement
      syncLimit=5
      # the directory where the snapshot is stored.
      # do not use /tmp for storage, /tmp here is just 
      # example sakes.
      dataDir=/usr/local/cluster/zookeeper/data
      dataLogDir=/usr/local/cluster/zookeeper/logs
      # the port at which the clients will connect
      clientPort=2181
      # the maximum number of client connections.
      # increase this if you need to handle more clients
      #maxClientCnxns=60
      #
      # Be sure to read the maintenance section of the 
      # administrator guide before turning on autopurge.
      #
      # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
      #
      # The number of snapshots to retain in dataDir
      #autopurge.snapRetainCount=3
      # Purge task interval in hours
      # Set to "0" to disable auto purge feature
      #autopurge.purgeInterval=1
      server.0=10.100.200.220:2888:3888
      server.1=10.100.200.221:2888:3888
      server.2=10.100.200.222:2888:3888
      
      這里還需要在數據目錄 /usr/local/cluster/zookeeper/data下新建名為myid的文件,各個主機對應的內容是不同的,master的內容是0,slave1的內容是1,slave2的內容是2,分別對應server.x中的x。server.A=B:C:D,其中A是一個數字, 表示這是第幾號server。B是該server所在的IP地址。C配置該server和集群中的leader交換消息所使用的端口。D配置選舉leader時所使用的端口。
  8. 使用scp命令,將配置好的Zookeeper發送到其他從節點上去。

    scp -r /usr/local/cluster/zookeeper/ slave1:/usr/local/cluster/
    scp -r /usr/local/cluster/zookeeper/ slave2:/usr/local/cluster/
    

    !!!別忘了從節點上的myid要改成對應的值!!!

    !!!別忘了從節點上的myid要改成對應的值!!!

    !!!別忘了從節點上的myid要改成對應的值!!!

    重要的事情說三遍!!!

  9. 啟動zookeeper。
    在各個節點執行以下命令:

    .zkServer.sh start
    

    輸入jps進行驗證。

    jps_zookeeper
  1. 查看各個主機的狀態。
    zkServer.sh status
    
    zookeeper status

Hadoop

  1. Hadoop下載傳送門

  2. 將Hadoop下載到本地后,通過scp命令將安裝包發送到master上。

    scp hadoop-2.8.5.tar.gz hadoop@10.100.200.220:~/
    
  3. 進入服務器根目錄下,將hadoop-2.8.5.tar.gz解壓至 /usr/local/cluster中。

    tar -zxvf ~/hadoop-2.8.5.tar.gz -C /usr/local/cluster/
    
  4. 進入 /usr/local/cluster 中,為了方便日后版本的更新,這里使用軟鏈接的方法。

    cd /usr/local/cluster
    ln -s hadoop-2.8.5 hadoop
    
  5. 設置環境變量,在 ~/.bashrc 添加如下內容。

    #hadoop
    export HADOOP_HOME=/usr/local/cluster/hadoop
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    
  6. 使環境變量立刻生效。

    source ~/.bashrc
    
  7. 驗證Hadoop是否安裝成功。

    hadoop version
    

    如果輸出hadoop版本信息即安裝成功。

  8. 配置hadoop。

    • 進入hadoop的配置目錄。

      cd /usr/local/cluster/hadoop/etc/hadoop/
      
    • 新建幾個文件夾,配置文件中需要用到。

      mkdir tmp
      mkdir hdfs
      mkdir hdfs/name
      mkdir hdfs/data
      
    • 需要修改的配置文件為:core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml、slaves、hadoop-env.sh、yarn-env.sh。將如下configuration的內容復制到對應的配置文件中即可。

    • hadoop-env.sh 和 yarn-env.sh增加下面一行命令,即配置java環境。

      export JAVA_HOME=/usr/local/cluster/java
      
    • core-site.xml

      <configuration>
        <property>
          <name>fs.defaultFS</name>
          <value>hdfs://master:9000</value>
        </property>
      
        <property>
          <name>io.file.buffer.size</name>
          <value>4096</value>
        </property>
      
        <property>
          <name>hadoop.tmp.dir</name>
          <value>/usr/local/cluster/hadoop/tmp</value>
        </property>
      </configuration>
      
    • hdfs-site.xml

      <configuration>
        <property>
          <name>dfs.replication</name>
          <value>3</value>
        </property> 
        
        <property>
          <name>dfs.namenode.name.dir</name>
          <value>/usr/local/cluster/hadoop/hdfs/name</value>
        </property>
      
        <property>
          <name>dfs.datanode.data.dir</name>
          <value>/usr/local/cluster/hadoop/hdfs/data</value>
        </property>
      
        <property>
          <name>dfs.http.address</name>
          <value>master:50070</value>
        </property>
      
        <property>
          <name>dfs.secondary.http.address</name>
          <value>master:50090</value>
        </property>
      
        <property>
          <name>dfs.webhdfs.enabled</name>
          <value>true</value>
        </property>
      
        <property>
          <name>dfs.permissions</name>
          <value>false</value>
        </property>
      </configuration>
      
    • yarn-site.xml

      <configuration>
          <property>
              <name>yarn.resourcemanager.hostname</name>
              <value>master</value>
          </property>
          <property>
              <name>yarn.nodemanager.aux-services</name>
              <value>mapreduce_shuffle</value>
          </property>
          <property>
              <name>yarn.resourcemanager.address</name>
              <value>master:8032</value>
          </property>
          <property>
              <name>yarn.resourcemanager.scheduler.address</name>
              <value>master:8030</value>
          </property>
          <property>
              <name>yarn.resourcemanager.resource-tracker.address</name>
              <value>master:8031</value>
          </property>
          <property>
              <name>yarn.resourcemanager.admin.address</name>
              <value>master:8033</value>
          </property>
          <property>
              <name>yarn.resourcemanager.webapp.address</name>
              <value>master:8088</value>
          </property>
      </configuration>
      
    • mapred-site.xml

      通過cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml創建etc/hadoop/mapred-site.xml,內容改為如下:

      <configuration>
        <property>
          <name>mapreduce.framework.name</name>
          <value>yarn</value>
        </property>
      
        <property>
          <name>mapreduce.jobhistory.address</name>
          <value>master:10020</value>
        </property>
      
        <property>
          <name>mapreduce.jobhistory.webapp.address</name>
          <value>master:19888</value>
        </property>
      </configuration>
      
    • slaves

      slave1
      slave2
      
    • 配置文件修改完以后,將master下hadoop文件夾復制到slave1和slave2中。

      scp -r /usr/local/cluster/hadoop/ slave1:/usr/local/cluster/
      scp -r /usr/local/cluster/hadoop/ slave2:/usr/local/cluster/
      
  9. 運行Hadoop。注意:啟動hadoop的命令都只在master上執行。

    • 啟動namenode,如果是第一次啟動namenode,需要對namenode進行格式化。命令如下:
      /usr/local/cluster/hadoop/bin/hdfs namenode -format
      
    • 啟動hdfs:
      /usr/local/cluster/hadoop/sbin/start-dfs.sh
      
    • 驗證hdfs是否啟動成功。

    在master輸入 jps,應當存在NameNode和SecondaryNamenode。

    jps_hdfs

    在slave1和slave2輸入jps,應當存在DataNode。

    web_datanode

    進一步驗證,訪問:http://master:50070/dfshealth.html#tab-overview,如圖:

    web_dfs

    • 啟動yarn

      /usr/local/cluster/hadoop/sbin/start-yarn.sh
      
    • 驗證yarn是否啟動成功。

      在master輸入 jps,應當存在ResourceManager。

    jps_resourcemanager

    在slave1和slave2輸入jps,應當存在NodeManager

    jps_nodemanager

    進一步驗證,訪問:http://master:8088/cluster,如圖:

    web_cluster

HBase

  1. HBase下載傳送門

  2. 將HBase下載到本地后,通過scp命令將安裝包發送到master主機上。

    scp hbase-2.1.0-bin.tar.gz hadoop@10.100.200.220:~/
    
  3. 進入服務器根目錄下,將hbase-2.1.0-bin.tar.gz解壓至 /usr/local/cluster中。

    tar -zxvf ~/hbase-2.1.0-bin.tar.gz -C /usr/local/cluster/
    
  4. 進入 /usr/local/cluster 中,為了方便日后版本的更新,這里使用軟鏈接的方法。

    cd /usr/local/cluster
    ln -s hbase-2.1.0 hbase
    
  5. 設置環境變量,在 ~/.bashrc 添加如下內容。

    #hbase
    export HBASE_HOME=/usr/local/cluster/hbase
    export PATH=$PATH:$HBASE_HOME/bin
    
  6. 使環境變量立刻生效。

    source ~/.bashrc
    
  7. 驗證Hbase是否安裝成功。

    hbase version
    

    如果輸出hadoop版本信息即安裝成功。

  8. 配置HBase

    主要修改conf目錄下的三個文件:hbase-env.sh、hbase-site.xml、regionservers。

    • hbase-env.sh
    export JAVA_HOME=/usr/local/cluster/java
    export HBASE_CLASSPATH=/usr/local/cluster/hbase/lib
    export HBASE_PID_DIR=/usr/local/cluster/hbase/data
    export HBASE_LOG_DIR=/usr/local/cluster/hbase/logs
    export HBASE_MANAGES_ZK=false
    

    注意:要在hbase文件下,新建data和logs兩個文件夾

    mkdir /usr/local/cluster/hbase/data
    mkdir /usr/local/cluster/hbase/logs
    
    • hbase-site.xml
    <configuration>
        <property>
          <name>hbase.tmp.dir</name>
          <value>/usr/local/cluster/hbase/data</value>
        </property>
        <property>
          <name>hbase.rootdir</name>
          <value>hdfs://master:9000/hbase</value>
        </property>
        <property>
          <name>hbase.cluster.distributed</name>
          <value>true</value>
        </property>
        <property>
          <name>hbase.zookeeper.quorum</name>
          <value>master,slave1,slave2</value>
        </property>
        <property>
          <name>hbase.zookeeper.property.clientPort</name>
          <value>2181</value>
        </property>
        <property>
          <name>hbase.zookeeper.property.dataDir</name>
          <value>/usr/local/cluster/zookeeper/data</value>
          <description>property from zoo.cfg,the directory where the snapshot is stored</description>
        </property>
    </configuration>
    
    • regionservers
      master
      slave1
      slave2
      
  9. 啟動hbase

     /usr/local/cluster/hbase/bin/start-hbase.sh
    
  10. 驗證hbase是否啟動成功。
    在master輸入 jps,應當存在HMaster和HRegionServer。

    jps_hbase_master_region

    在slave1和slave2輸入jps,應當存在HRegionServer。

    jps_hbase_region

    進一步驗證,訪問:http://master:16010/master-status,如圖。

    web_hbase

踩坑記錄:HBase裝完之后,發現HREgionServer可以啟動,但是HMaster卻始終無法啟動,通過日志文件發現報的錯誤如下:
java.lang.NoClassDefFoundError: org/apache/htrace/SamplerBuilder at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:635) at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:619) at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:149) at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2669) at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:94) at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2703) at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2685) at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:373) at org.apache.hadoop.fs.Path.getFileSystem(Path.java:295) at org.apache.hadoop.hbase.util.CommonFSUtils.getRootDir(CommonFSUtils.java:358) at org.apache.hadoop.hbase.util.CommonFSUtils.isValidWALRootDir(CommonFSUtils.java:407) at org.apache.hadoop.hbase.util.CommonFSUtils.getWALRootDir(CommonFSUtils.java:383) at org.apache.hadoop.hbase.regionserver.HRegionServer.initializeFileSystem(HRegionServer.java:691) at org.apache.hadoop.hbase.regionserver.HRegionServer.<init>(HRegionServer.java:600) at org.apache.hadoop.hbase.master.HMaster.<init>(HMaster.java:484) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.apache.hadoop.hbase.master.HMaster.constructMaster(HMaster.java:2965) at org.apache.hadoop.hbase.master.HMasterCommandLine.startMaster(HMasterCommandLine.java:236) at org.apache.hadoop.hbase.master.HMasterCommandLine.run(HMasterCommandLine.java:140) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) at org.apache.hadoop.hbase.util.ServerCommandLine.doMain(ServerCommandLine.java:149) at org.apache.hadoop.hbase.master.HMaster.main(HMaster.java:2983) Caused by: java.lang.ClassNotFoundException: org.apache.htrace.SamplerBuilder at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 25 more 2018-08-01 23:30:33,794 ERROR [main] master.HMasterCommandLine: Master exiting java.lang.RuntimeException: Failed construction of Master: class org.apache.hadoop.hbase.master.HMaster. at org.apache.hadoop.hbase.master.HMaster.constructMaster(HMaster.java:2972) at org.apache.hadoop.hbase.master.HMasterCommandLine.startMaster(HMasterCommandLine.java:236) at org.apache.hadoop.hbase.master.HMasterCommandLine.run(HMasterCommandLine.java:140) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) at org.apache.hadoop.hbase.util.ServerCommandLine.doMain(ServerCommandLine.java:149) at org.apache.hadoop.hbase.master.HMaster.main(HMaster.java:2983) Caused by: java.lang.NoClassDefFoundError: org/apache/htrace/SamplerBuilder at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:635) at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:619) at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:149) at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2669) at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:94) at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2703) at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2685) at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:373) at org.apache.hadoop.fs.Path.getFileSystem(Path.java:295) at org.apache.hadoop.hbase.util.CommonFSUtils.getRootDir(CommonFSUtils.java:358) at org.apache.hadoop.hbase.util.CommonFSUtils.isValidWALRootDir(CommonFSUtils.java:407) at org.apache.hadoop.hbase.util.CommonFSUtils.getWALRootDir(CommonFSUtils.java:383) at org.apache.hadoop.hbase.regionserver.HRegionServer.initializeFileSystem(HRegionServer.java:691) at org.apache.hadoop.hbase.regionserver.HRegionServer.<init>(HRegionServer.java:600) at org.apache.hadoop.hbase.master.HMaster.<init>(HMaster.java:484) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.apache.hadoop.hbase.master.HMaster.constructMaster(HMaster.java:2965) ... 5 more Caused by: java.lang.ClassNotFoundException: org.apache.htrace.SamplerBuilder at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 25 more
這個問題耗費了很長時間都沒找到錯誤原因,最終在這里找到了解決方法。

cp $HBASE_HOME/lib/client-facing-thirdparty/htrace-core-3.1.0-incubating.jar $HBASE_HOME/lib/

"個人感覺hbase-2.1.0編譯的問題,建議以后還是自己編譯一下hbase代碼,目前還不知道這樣改動會有什么問題。"

總結

以上,就完成了整個集群環境的搭建。希望沒有坑到你。如果不幸坑到了你,歡迎留言吐槽!

寫在最后

歡迎大家關注我的個人博客復旦猿

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,882評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,208評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,746評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,666評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,477評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,960評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,047評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,200評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,726評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,617評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,807評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,327評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,049評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,425評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,674評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,432評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,769評論 2 372

推薦閱讀更多精彩內容