您的位置:首页 > 运维架构

hadoop入门之与hive及hbase集成配置

2016-01-14 18:22 615 查看
 公司最近要做运营分析系统,刚接触hadoop不久,至少先搞清楚hadoop生态系统中的工具,搞了2个星期,现在记录一些关于hive和hbase和hadoop 集成的配置。

 在Hadoop部署配置笔记 中先搞明白了hadoop的集群部署,现在又来做和hive及hbase
的集成,我的终极目标是 hbase 和phoenix 集成,使用phoenix 用java 代码采用jdbc 方式查询hbase ,搞明白presto 和 hive 集成 及 spark 和 hbase 集成,那么hive 和hbase的配置必不可少的要学会它;

         一、准备工作

                 apache  hive1.0.1

           apache hbase1.0.1.1
mysql 5.17

         二、环境配置  

 如果没有vim命令可以先用yum install vim 安装下 ,mysql 的安装就不说了,网上有很多,我这里配置了maven 的环境变量是为了编译presto和spark,此处hive 我只安装在namenode上,只是测试。

             

vim /etc/profile


export JAVA_HOME=/java/jdk1.8.0_65
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
export HADOOP_HOME=/home/hadoop/hadoop
export HIVE_HOME=/home/hadoop/hive
export PATH=$PATH:$HADOOP_HOME/bin:$HIVE_HOME/bin
export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin
export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:${MAVEN_HOME}/bin
export HBASE_HOME=/home/hadoop/hbase
export PATH=$PATH:$HBASE_HOME/bin


   三、配置文件

    在修改配置文件之前 还是要先创建一些hive需要使用的文件夹,这之前在mysql 数据库中先创建一个数据库,我这数据库名字使用hive,这个mysql数据库是存放hive的元数据,也可以使用其他关系型数据库,我这使用mysql,将mysql-connector-java-5.1.38-bin.jar拷贝到/home/hadoop/hive/lib下,因为需要mysql驱动去创建hive的元数据

 hive 配置文件配置  

mkdir /home/hadoop/hive/warehouse && mkdir /home/hadoop/hive/tmp
cp /home/hadoop/mysql-connector-java-5.1.38-bin.jar /home/hadoop/hive/lib
vim / home/hadoop/hive/conf/hive-site.xml
<span style="font-family: Arial, Helvetica, sans-serif;"><pre name="code" class="plain"><?xml version="1.0" encoding="UTF-8" standalone="no"?></span>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>驱动名</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>用户名</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
<description>密码</description>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>hdfs://master:9000/home/hadoop/hive/warehouse</value>
<description>数据路径(相对hdfs)</description>
</property>
<property>
<name>hive.exec.scratchdir</name>
<value>hdfs://master:9000/home/hadoop/hive/warehouse</value>
</property>
<property>
<name>hive.querylog.location</name>
<value>/home/hadoop/hive/log</value>
</property>
<property>
<name>hive.aux.jars.path</name>
<value>file:///home/hadoop/hive/lib/hive-hbase-handler-1.2.1.jar, file:///home/hadoop/hbase/lib/protobuf-java-2.5.0.jar, file:///home/hadoop/hbase/lib/hbase-common-1.0.1.1.jar, file:///home/hadoop/hbase/lib/hbase-client-1.0.1.1.jar, file:///home/hadoop/hbase/lib/zookeeper-3.4.6.jar, file:///home/hadoop/hbase/lib/guava-12.0.1.jar</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://192.168.200.96:9083</value>
<description>运行hive得主机地址及端口</description>
</property>
</configuration>






修改日志配置文件


cp hive-log4j.properties.template hive-log4j.properties
vim hive-log4j.properties


log4j.appender.EventCounter=org.apache.hadoop.log.metrics.EventCounter


重点说一下

hive.aux.jars.path ,这个是运行hive的cli时引入的jar包,如果要使用hive创建hbase的表,那么就需要引入 上面的jar包
</pre><p></p>hbase 配置文件配置<p>hbase-site.xml</p><p></p><pre name="code" class="html"><configuration>
<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,node1,node2</value>
</property>

<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/hadoop/hadoop/zookeeper</value>
</property>

<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>

<property>
<name>hbase.coprocessor.user.region.classes</name>
<value>org.apache.hadoop.hbase.coprocessor.AggregateImplementation</value>
</property>


hbase-env.sh 更改jdk环境变量

 

export JAVA_HOME=/java/jdk1.8.0_65/


然后将hbase 文件夹分发node1 和node 2上

scp -r hbase hadoop@node1:/home/hadoop

scp -r hbase hadoop@node2:/home/hadoop

按照上面简单配置hbase 和hive 就配置完了,不是说整合吗?哪里整合了,下面继续

四、 启动hbase 和hive 

[hadoop@master bin]$  start-hbase.sh


查看hbase 启动日志 如果里面没有乱七八糟的错误堆栈信息,那么在去看下hbase的进程启动情况

master 进程

[hadoop@master bin]$ jps
19881 NameNode
23118 JobTracker
10233 HMaster
19188 Jps
14066 SecondaryNameNode


node1 和node2 上

[hadoop@node1 ~]$ jps
21685 HRegionServer
21608 HQuorumPeer
19581 DataNode
21748 Jps
19679 TaskTracker


如果进程都启动了,在master 上

执行hbsae shell命令,进入hbase控制台

输入: hbase shell 进入控制台,然后输入list 显示hbase 下的表 说明hbase 部署成功了



用hbase 去创建表比较麻烦不如sql 语句来的直观,下面我们在hive 里面进行创建hbase 表的实验

hive 启动

此次我们只是使用hive的元数据,所以启动matestore 服务,加&是在后台启动

hive --service metastore &
</pre><pre name="code" class="plain">ps aux|grep hive




hive metastore 启动后会在mysql 数据库初始化之前创建的hive 数据库



然后进入hive 命令行进行操作

hive

show tables;
输入 show tables ; 查看当前默认数据库下的表

输入下面建表语句,创建 hive 和 hbase 关联的表,如果不出现异常,则说明hive 和 hbase 已经可以关联了

CREATE  TABLE default.order4(
id BIGINT,
code STRING,
name STRING,
status STRING,
quantity FLOAT,
ordertype STRING,
detailsize FLOAT,
companyid BIGINT,
creater STRING,
create_time DATE,
updater STRING,
update_time DATE
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.hbase.HBaseSerDe'
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping"=":key,data:code,data:name,data:status,data:quantity,data:ordertype,data:detailsize,data:companyid,data:creater,data:create_time,data:updater,data:update_time")
TBLPROPERTIES("hbase.table.name" = "order4")
;


我们可以导入数据进行测试下,

先put 一个 txt 文件到 hdfs 中

hadoop dfs -put 111.txt /tmp


111.txt文件内容为,随便搞几条



 

使用hbase  ImportTsv 命令进行导入

导入形式分为2种:

 直接导入: 

hbase org.apache.hadoop.hbase.mapreduce.ImportTsv  -Dimporttsv.separator=',' -Dimporttsv.columns=HBASE_ROW_KEY,data:code,data:name,data:status,data:quantity,data:ordertype,data:detailsize,data:companyid,data:creater,data:create_time,data:updater,data:update_time  order4 /tmp/111.txt


HBASE_ROW_KEY 这个是rowkey 后面跟着是烈簇和列格式为 colFamily:col,....

-Dimporttsv.separator=',' 这个是使用逗号分隔数据
</pre><pre name="code" class="plain">后面结尾处order4 是表名 和刚才 put 到hdfs 中的文件


bulk load 方式:

hbase org.apache.hadoop.hbase.mapreduce.ImportTsv  -Dimporttsv.separator=',' -Dimporttsv.bulk.output=/home/hadoop/  -Dimporttsv.columns=HBASE_ROW_KEY,data:code,data:name,data:status,data:quantity,data:ordertype,data:detailsize,data:companyid,data:creater,data:create_time,data:updater,data:update_time  order4 /tmp/111.txt   这个是先生成hfile文件
</pre><pre name="code" class="html">然后在通过:
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /home/hadoop/order4 order4 在将hfile导入到hbase中


然后就是一大堆 map执行输出的日志 后面打印的结果 有一行是badLine 是0 说明就导入成功了

然后进入hive 命令行 查看数据

select * from order3 limit 10;

                          
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: