軟件環境:Hadoop2.4, HBase0.98 for Hadoop2, Hive0.13
前期準備:
三臺服務器:
192.168.0.1(namenode)
192.168.0.2(datanode1)
192.168.0.3(datanode2)
1)Java環境安裝與配置,不再敘述
2)主機名稱的修改,可選,但建議這樣做:
在/etc/sysconfig/network文件中修改主機名
在/etc/hosts文件中配置主機名與IP地址的映射
192.168.0.1namenodenamenode
192.168.0.2datanode1datanode1
192.168.0.3datanode2datanode2
確保通過主機名可以訪問各個節點
3)SSH無密碼訪問
在namenode上執行
ssh-keygen -t rsa一路回車
cd ~/.ssh 會生成id_rsa.pub文件
cat id_rsa.pub>>authorized_keys將密鑰追加進認證文件中
chmod 700 authorized_keys修改認證文件權限
chmod 600 .這一步很重要,不可少,修改.ssh目錄的權限
將id_rsa.pub追加到所在datanode結點的authorized_keys文件中,重複同樣的步驟
修改所有機器的/etc/ssh/sshd_config文件
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile ~/.ssh/authorized_keys
在namenode上用ssh測試接連各datanode是否成功不需要密碼
Hadoop安裝:
將解壓hadoop安裝包,(注意,這裏從apache上下載的是32位的,而我們的服務器通常是64位的,這裏的差別稍微會講)
創建hadoop目錄的軟件鏈接:
ln -s hadoop目錄 hadoop
修改~/.bashrc,配置一些環境變量,有些是可能的,但建議都配置上
export HADOOP_HOME=路徑
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/lib/native
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native
進入hadoop/etc/hadoop目錄,
在hadoop-env.sh末尾加入
export JAVA_HOME=路徑
配置如下幾個文件
1)core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop/tmp</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://namenode:9000</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>namenode</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
</configuration>
相關文件路徑事先建立好
2)hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/hadoop/hdfs/data</value>
</property>
</configuration>
3)mapred-site.xml (如果沒有就cp mapred-site.xml-template mapred-site.xml)
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
4)yarn-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>namenode:9001</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>namenode:18030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>namenode:18025</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>namenode:18035</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>namenode:18088</value>
</property>
</configuration>
5)slaves
datanode1
datanode2
如果系統是64位的,進入hadoop/lib/native目錄下,用64位的庫替換掉裏面的32位庫
將代碼同步到所有datanode節點上,必須是相同的路徑,相同的目錄結構
hadoop namenode -format 格式化HDFS
start-all.sh 啓動hadoop
jps 查看hadoop啓動情況
NameNode
SecondaryNameNode
ResourceManager
出現上面3個進程說明啓動成功,在hadoop2.4裏面,用戶yarn的resourcemanager替代了jobtracker與tasktracker
HBase安裝配置
解壓tar
進入hbase/conf目錄
修改hbase-env.sh文件,在末尾加入
export JAVA_HOME=java路徑
export HBASE_CLASSPATH=hbase/conf目錄
export HBASE_MANAGERS_ZK=true
修改hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://namenode:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
</configuration>
相關路徑在HDFS上事先建立好
修改~/.bashrc,加入如下配置
export HBASE_HOME=hbase路徑
export PATH=$HBASE_HOME/bin:$PATH
啓動hbase:start-hbase.sh
jps
HQuorumPeer
HRegionServer
HMaster
這3個進程同時出現,纔算正確啓動,如果沒有HMaster,說明與hadoop的連接有問題,查看相關jar版本是否一致,如果是hadoop2.x,必須用hbase0.96以上for hadoop2的版本
Hive安裝配置
解壓tar
進入hive/conf目錄
修改hive-site.xml文件
修改如下配置
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://ip地址:3306/hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>用戶名</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>密碼</value>
</property>
這裏採用外部數據庫mysql的方式存儲hive的元數據信息
相關路徑在hdfs上事先建立好,將mysql的驅動考到hive/lib下
在mysql中授權用戶遠程訪問權限
修改~/.bashrc,加入如下配置
export HIVE_HOME=hive路徑
export PATH=$HIVE_HOME/bin:$PATH
啓動hive,進入控制檯:
hive
沒有錯誤,hive安裝成功
Hive與HBase整合
首先需要把hive/lib下的hbase包替換成安裝的hbase的,需要如下幾下:
hbase-client-0.98.2-hadoop2.jar
hbase-common-0.98.2-hadoop2.jar
hbase-common-0.98.2-hadoop2-tests.jar
hbase-protocol-0.98.2-hadoop2.jar
htrace-core-2.04.jar
hbase-server-0.98.2-hadoop2.jar
將hadoop節點添加到hive-site.xml中
<property>
<name>hbase.zookeeper.quorum</name>
<value>所有節點</value>
</property>
如果不加入這個配置,hive中select * from table可以查到數據,但是其它的HQL一走MR,就查不到了,顯然是在查HDFS的時候出現了問題,所以這裏必須配置上這個
用關聯的方式啓動hive
hive -hiveconf hbase.master=master地址:6000
進入hive控制檯,建立關聯表
create table mt (key string, value string) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties ("hbase.columns.mapping" = ":key,hvalue:value") tblproperties ("hbase.table.name" = "mt");
mapping指定hive的表與hbase的表如何對應的格式有些講究:hive要比hbase多一列,通常這列命名成key,因爲hbase有一個默認的rowid列,所以這裏key是映射到rowid,映射的格式是hbase列族:列名,因爲key是映射到默認列,所以這裏寫成:key
name指定在hbase上生成的表名,如果要關聯hbase上已經存在的表,用create external table 後面的完全一致,即可
執行完成後,會在hbase也生成對應的表,如此一來,就做好了hive與hbase的整合,hive對這個表數據的修改會會在hbase看到,同理,hbase的修改也會在hive看到,這裏需要注意一點的時,在hbase中輸入數據時,要指定的列名必須是hvalue:value(與maping的第二個映射保持一致,即列族:列名),數據纔在增加到hive中,需要注意一下!