软件环境: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
相关文件路径事先建立好
2)hdfs-site.xml
3)mapred-site.xml (如果没有就cp mapred-site.xml-template mapred-site.xml)
4)yarn-site.xml
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
相关路径在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文件
修改如下配置
这里采用外部数据库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中
如果不加入这个配置,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中,需要注意一下!