大数据技术 手把手教你搭建hadoop+hive测试环境
沉沙 2018-10-11 来源 : 阅读 3416 评论 0

摘要:本篇教程探讨了大数据技术 手把手教你搭建hadoop+hive测试环境,希望阅读本篇文章以后大家有所收获,帮助大家对大数据技术的理解更加深入。

本篇教程探讨了大数据技术 手把手教你搭建hadoop+hive测试环境,希望阅读本篇文章以后大家有所收获,帮助大家对大数据技术的理解更加深入。

<


 
基础环境:
 
1. 公司云主机debain8.8 (不像docker,所以对系统内核无要求)
 
1. 前置安装:
 
1.1 jdk8(hive要求jdk7以上,千万不要jdk9!!!!!详情见末尾作死一)1.2 hadoop 2.7.X以上1.3 mysql或者postgresql(作为hive metastore的数据库)
 
2. 安装hadoop:
 

 

1.安装metastore所用到数据库。
对于mysql或者postgresql就偷懒直接docker pull 然后docker run了一个出来。毕竟仅仅作为hive元信息储存角色。
docker pull mysql:5.7
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=XXX -d mysql:5.7
 
2.jdk版本升级。
官方下载jdk8的二进制包,使用whichjava查看系统自带java目录下载好的二进制包直接解压后编辑etc/profile文件设置java相关的环境变量.
export JAVA_HOME=/xx/xx/jdk8 
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
 
编辑完后记得source /etc/profile,接着运行java -version确认是否成功
 
3.增加hadoop安装用户
官方建议增加hadoop用户组以及hadoop用户,我也建议这样做,但是公司云主机的话我就直接用我们有数的公共账号。
 
4.安装ssh服务器
hadoop使用到了ssh,所以需要
apt-get install openssh-server
 
然后测试
ssh localhost #会生成.ssh文件夹
 
并且配置ssh无密码登陆
cd /home/XXXX/.ssh/ #XX为你的用户名,比如有数账号是youdata,XXX就是youdata 
ssh-keygen -t rsa# 一路按回车就可以
cat ./id_rsa.pub >> ./authorized_keys # 加入授权
 
在执行一下ssh localhost 确保配置成功。
 
5.hadoop服务安装
直接找到官方下载url,wget下来我用的是:
wget heep://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.7.4/hadoop-2.7.4.tar.gz
 
顺便也把hive下载下来吧


wget //mirror.bit.edu.cn/apache/hive/hive-2.1.1/apache-hive-2.1.1-bin.tar.gz
 
下载过后解压即可,最好选择挂载的比较大云硬盘上。然后记得对你的安装用户给权限。
sudo chown -R hadoop ./hadoop#hadoop为用户,第二个为解压后的文件夹名
 
然后进入hadoop目录下,执行
./bin/hadoop version
 


如果成功就说明下载的hadoop是可用的。 接下来修改hadoop配置达到单机伪分布式启动.所谓伪分布式就是在单机上以分离的java进程运行,节点同时扮演NameNode和DataNode,读取的是HDFS中的文件。
 
6.hadoop伪分布式配置
Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/中,伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-
site.xml 。Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。
 
6.1. core-site.xml修改:


       hadoop.tmp.dir
       file:/usr/local/hadoop/tmp


       fs.defaultFS
      hdfs://localhost:9000


 
其中目录同样推荐放在空间较大的盘上。并且确保用户有权限,所以最好用当前用户建一个~~
 
6.2. hdfs-site.xml修改:


       dfs.replication
       1


       dfs.namenode.name.dir
       file:/usr/local/hadoop/tmp/dfs/name


       dfs.datanode.data.dir
       file:/usr/local/hadoop/tmp/dfs/data


 
同样的,这两个文件目录最好自己指定并且用当前用户建,指定的好处是避免误删导致hadoop需要重新format.
 
7.初始化hadoop节点
配置完后在hadoop目录下执行
./bin/hdfs namenode -format
 
成功后可以看到Exitting with status 0
坑一: 启动时候提示:ssh: Could not resolve hostname xxx,设置hadoop环境变量即可解决
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

 

启动日志信息是记录在 /usr/local/hadoop/logs/hadoop-hadoop-namenode-DBLab-XMU.log 中,所以应该查看这个后缀为 .log 的文件;
 
8.hadoop服务启动
启动hadoop执行:
./sbin/start-dfs.sh
 
启动成功后执行jps,可以看到
youdata@hzadg-youdata-test:/srv/nbs/0/hadoop$ jps 
35664 SecondaryNameNode
52310 Jps
35320 NameNode
35485 DataNode
 
会出现 “NameNode”、”DataNode” 和 “SecondaryNameNode” 要关闭hadoop执行
./sbin/stop-dfs.sh
 
额外的启动Yarn:YARN 是从 MapReduce 中分离出来的,负责资源管理与任务调度。YARN 运行于 MapReduce 之上,提供了高可用性、高扩展性 上述通过 ./sbin/start-dfs.sh 启动 Hadoop,仅仅是启动了 MapReduce 环境,我们可以启动YARN ,让 YARN 来负责资源管理与任务调度。 编辑/etc/hadoop/mapred-site.xml


       mapreduce.framework.name
       yarn


 




接着修改yarn-site.xml


       yarn.nodemanager.aux-services
       mapreduce_shuffle


 
然后启动mapreduce即上面的
./sbin/start-dfs.sh # 启动MapReduce
./sbin/start-yarn.sh # 启动YARN
./sbin/mr-jobhistory-daemon.sh start historyserver #开启历史服务器,才能在Web中查看任务运行情况
 
YARN 有个好处是可以通过 Web 界面查看任务的运行情况://localhost:8088/cluster 至此hadoop安装完毕,接下来安装hive.
 
3. 安装hive:
1.对hive基本介绍
metadata: 即元数据。元数据包含用Hive创建的database、table等的元信息。元数据存储在关系型数据库中。如Derby、MySQL等。 Metastore:客户端连接metastore服务,metastore再去连接MySQL数据库来存取元数据。有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore 服务即 可 。然 后 对 于 metastore 有 三 种 配 置 方 式 : 
1.内嵌模式使用的是内嵌的Derby数据库来存储元数据,也不需要额外起Metastore服务。这个是默认的,配置简单,但是一次只能一个客户端连接                                                                                                                                                     
2.本地元存储和远程元存储都采用外部数据库来存储元数据,目前支持的数据库有:MySQL、Postgres、Oracle、MS SQL Server.在这里我们使用MySQL。                                                                                                                                     
3.本地元存储和远程元存储的区别是:本地元存储不需要单独起metastore服务,用的是跟hive在同一个进程里的metastore服务。远程元存储需要单独起metastore服务,然后每个客户端都在配置文件里配置连接到该metastore服务。
 
2.hive配置
hive配置文件位于解压目录下的conf里 1.修改hive-env.sh 
export JAVA_HOME=/opt/java ##Java路径




export HADOOP_HOME=/opt/hadoop ##Hadoop安装路径
export HIVE_HOME=/opt/hive ##Hive安装路径
export HIVE_CONF_DIR=/opt/hive/conf ##Hive配置文件路径
 
2.创建hdfs目录并赋予权限
hdfs dfs -mkdir -p /user/hive/warehouse 
hdfs dfs -mkdir -p /user/hive/tmp
hdfs dfs -mkdir -p /user/hive/log
hdfs dfs -chmod g+w /user/hive/warehouse 
hdfs dfs -chmod g+w /usr/hive/tmp
hdfs dfs -chmod g+w /usr/hive/log
 




3.修改hive-site.xml 将 hive-site.xml 文件中以下几个配置项的值设置成上一步中创建的几个路径,同样建议放于空间较大的盘上


       hive.exec.scratchdir
       /user/hive/tmp


       hive.metastore.warehouse.dir
       /user/hive/warehouse


       hive.querylog.location
       /user/hive/log


 
4.增加metastore使用到的数据库相关连接信息的配置,修改hive-site.xml


       javax.jdo.option.ConnectionURL
       jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&characterEncodig=UTF-8&useSSL=


       javax.jdo.option.ConnectionDriverName
       com.mysql.jdbc.Driver


       javax.jdo.option.ConnectionUserName
       hive


       javax.jdo.option.ConnectionPassword
       hive








 
运行Hive 在命令行运行 hive 命令时必须保证以下两点: HDFS 已经启动。可以使用 start-dfs.sh 脚本来启动 HDFS。MySQL jdbc jar包添加到 $HIVE_HOME/lib 目录下。 然后在hive目录下,执行




./bin/schematool-dbtype mysql-initSchema

 
执行成功后就可以执行hive看成功了吗
./bin/hive
 
启动hive服务则是
./bin hive --service hiveserver2 &
 
测试用beeline连接,如果出现类似
org.apache.hive.service.cli.HiveSQLException: Failed to open new session: java.lang.RuntimeException: org.apache
 
就是你这个用户不允许伪装为 anonymous(hive的默认用户,默认配置可以查看)。 修改hadoop的core-site.xml文件增加


       hadoop.proxyuser.XXX.hosts
       *


       hadoop.proxyuser.XXX.groups
      *


 





即可,XXX是你的用户名,然后重启hadoop. 至此,hadoop+hive测试环境就已经搭建完成。 额外的:
 
作死一:好奇使用jdk9
因为jdk9还不成熟,并且我直观上对之前老版本编译出的jar包有些不兼容,比如
Exception in thread "main" java.lang.ClassCastException: java.base/jdk.internal.loader.ClassLoaders$AppClassLoa
 
这个还能搜到原因,是因为jdk9的 将URLClassLoader 作为系统的ClassLoaders的superclass导致,所以之前用到他两转化的都会出错需要重写代码。 又或者:
java.lang.Integer (jdbc-type="", sql-type="") cant be mapped for this datastore. No mapping is available.
 
在使用mysql作为metastore时候报错,使用到的mysqljdbc为:mysql-connector-java-5.1.42.jar 这个错误完全搜不到原因,不过看报错是java类型到sql映射出错。所以猜测仍然是jdk9对之前版本的某些jar或者之前jdk的某些用法不支持。 后来更换mysqljdbc版本到6.06仍然这个错误。后来更换jdk版本就不再出错。。。。。所以,现在先别作死生产环境用java9......
     

本文由职坐标整理发布,学习更多的大数据技术相关知识,请关注职坐标大技术云计算大技术技术频道!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程