大数据综合实验的踩坑总结(林子雨)

这里是实验的来源
综合实验一
综合实验二

实验环境说明

我使用的实验环境是:Hadoop2.7.7 + Hive3.1.2 + ZooKeeper3.6.1 + HBase1.4.13 + Sqoop1.4.6

之前一直是按照林子雨老师的博客进行学习的,他里面安装的是hadoop3.1.3,Hbase2.2.2,在本次实验中,hadoop的版本和hbase的版本是不能满足需求的,原因是Sqoop1.4.6的数据互导不能支持hbase2.x,需要更换hbase,换了hbase还需要换与其兼容的hadoop。上面的实验环境是亲测可行的

更换hadoop和hbase版本并安装ZooKeeper

之前的hadoop和hbase版本可以不用删除。
Hive和Sqoop的安装可以参照林子雨老师的博客:
Hive安装
Sqoop安装

  1. 安装hadoop2.7.7

我们选择将 Hadoop 安装至 /usr/local/ 中:

$ sudo tar -zxf ~/下载/hadoop-2.7.7.tar.gz -C /usr/local    # 解压到/usr/local中
$ cd /usr/local/
$ sudo mv ./hadoop-2.7.7/ ./hadoop2.7            # 将文件夹名改为hadoop
$ sudo chown -R hadoop ./hadoop2.7       # 修改文件权限

伪分布式配置:

$ sudo vi /usr/local/hadoop2.7/etc/hadoop/core-site.xml 
<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/hadoop2.7/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>
$ sudo vi /usr/local/hadoop2.7/etc/hadoop/hdfs-site.xml
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/hadoop2.7/tmp/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/hadoop2.7/tmp/dfs/data</value>
    </property>
</configuration>

配置完成后,执行 NameNode 的格式化:

$ cd /usr/local/hadoop2.7
./bin/hdfs namenode -format

到这里,完成了配置,一定要进入hadoop2.7这个目录来启动

$ cd /usr/local/hadoop2.7
./sbin/start-dfs.sh  

可以进入网页端看看:localhost:50070
在这里插入图片描述
版本已经是2.7.7的了,要是以后想用回3.1.3,直接进入3.1.3的目录启动即可

  1. 安装hbase1.4.13
    将解压安装包hbase-1.4.13-bin.tar.gz至路径 /usr/local
$ cd ~
$ sudo tar -zxf ~/下载/hbase-1.4.13-bin.tar.gz -C /usr/local
$ cd /usr/local
$ sudo mv ./hbase-1.4.13 ./hbase1.4
$ sudo chown -R hadoop ./hbase1.4

配置环境变量

$ vim ~/.bashrc

加入

export PATH=$PATH:/usr/local/hbase1.4/bin

退出,再立即生效

$ source ~/.bashrc

伪分布式配置:

$ sudo vi /usr/local/hbase1.4/conf/hbase-env.sh

这里是在hbase-env.sh这个文件里面找到JAVA_HOME、HBASE_CLASSPATH、HBASE_MANAGES_ZK这三个名称,然后把前面的“#”号删除,再改成下面这样,我是因为要使用外部的zookeeper所以把HBASE_MANAGES_ZK改为false,要是用hbase内部的zookeeper,可以改成true。JAVA_HOME是写java的位置,我用的jdk是jdk1.8.0_241,大家可以根据自己的jdk版本来修改这里。

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_241
export HBASE_CLASSPATH=/usr/local/hbase1.4/conf 
export HBASE_MANAGES_ZK=false
$ sudo vi /usr/local/hbase1.4/conf/hbase-site.xml
<configuration>
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://localhost:9000/hbase</value>
        </property>
        <property>
                <name>hbase.cluster.distributed</name>
                <value>true</value>
        </property>
        <property>
        		<name>hbase.unsafe.stream.capability.enforce</name>
        		<value>false</value>
    	</property>
</configuration>

配置完成,现在还不能启动,因为我是用了外部zookeeper的,要先启动zookeeper才能再启动hbase

  1. 安装zookeeper3.6.1

说明:使用外部zookeeper我感觉会使hbase稳定一些,而且hbase出问题了也能使用外部zookeeper解决,如果嫌麻烦也不装,用hbase内部的zookeeper也是可以的。

将解压安装包zookeeper3.6.1至路径 /usr/local

$ cd ~
$ sudo tar -zxf ~/下载/apache-zookeeper-3.6.1-bin.tar.gz -C /usr/local
$ cd /usr/local
$ sudo mv ./apache-zookeeper-3.6.1 ./zookeeper
$ sudo chown -R hadoop ./zookeeper

进入zookeeper目录下创建目录tmp

$ cd /usr/local/zookeeper
$ sudo mkdir tmp
$ sudo chown -R hadoop ./tmp

进入conf,将zoo_sample.cfg复制一份,并命名为zoo.cfg,修改zoo.cfg

$ cd conf
$ sudo cp zoo_sample.cfg  zoo.cfg
$ sudo vi zoo.cfg
#将原来的dataDir注释掉,改成这样
dataDir=/usr/local/zookeeper/tmp

如图所示:
在这里插入图片描述
保存退出。

修改环境变量

$ vim ~/.bashrc
# 添加以下内容
export ZOOKEEPER_HOME=/usr/zookeeper
export PATH=${ZOOKEEPER_HOME}/bin:$PATH
# 保存退出

# 使配置生效
$ source ~/.bashrc

zookeeper安装完成
先启动zookeeper:zkServer.sh start
再启动hbase:

$ cd /usr/local/hbase1.4
$ ./bin/start-hbase.sh

在这里插入图片描述
我们也可以进去hbase的网址看看:localhost:16010
在这里插入图片描述
可以看到是1.4.13版本了

注意:启动顺序:hadoop->zookeeper->hbase
关闭顺序:hbase->zookeeper->hadoop

  1. 修改Sqoop的配置
    修改sqoop-env.sh的如下信息
$ cd /usr/local/sqoop/conf
$ sudo vi sqoop-env.sh
export HADOOP_COMMON_HOME=/usr/local/hadoop2.7
export HADOOP_MAPRED_HOME=/usr/local/hadoop2.7
export HBASE_HOME=/usr/local/hbase1.4

最后我再贴上自己的环境变量信息,你们可以酌情修改(可能很不规范,请忽略吧,嘻嘻)
在这里插入图片描述

在实验中的踩坑总结

  1. 没有导入数据到hive的bigdata_user表中
    用这句话可以实现导入:
hive>load data local inpath '/usr/local/bigdatacase/dataset/user_table.txt' overwrite into table bigdata_user;
  1. 使用Sqoop将数据从Hive导入MySQL
    这一步我失败了,错误:Sqoop:Import failed: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf
    解决方法是:
    (1)当你每次执行失败后,其实在/tmp/sqoop-你的用户名/compile(或者是/tmp/sqoop/compile,可以找找看)文件夹下有许多临时文件夹,文件夹名称为一大串字符,每个文件夹内有对应表名生成的.jar包、.java和.class文件。将这三个文件拷贝到你的sqoop安装目录/lib文件夹下即可解决
    (2)将hive/lib中的hive-common-3.1.2.jar复制到sqoop/lib中
  2. 使用Sqoop将数据从MySQL导入HBase
    这里HBase使用1.4的话就不会报错,而且通过java api编程导入数据到hbase也是用1.4的版本就不会报错
  3. 安装R语言
    一定要按照这个顺序来操作
    (1)添加公钥
$ sudo apt-key adv –keyserver keyserver.ubuntu.com –recv-keys 51716619E084DAB9

(2) 利用vim打开/etc/apt/sources.list文件

$ sudo vim /etc/apt/sources.list 

(3)在文件的最后一行添加清华大学的镜像源:(这里我的是Ubuntu18.04,对应的R语言版本是bionic-cran35,不同版本的Ubuntu,安装不同的R语言版本)

deb http://mirrors.tuna.tsinghua.edu.cn/CRAN/bin/linux/ubuntu/ bionic-cran35/

(5)退出vim,更新软件源列表:

$ sudo apt-get update 

(6)安装R语言

$ sudo apt-get install r-base

安装成功后进入R,再安装一些依赖库,包括:RMySQL、ggplot2、devtools和recharts

install.packages(‘RMySQL’)
install.packages(‘ggplot2’)
install.packages(‘devtools’)
devtools::install_github(‘taiyun/recharts’)

安装这几个东西的时候有出现错误,比如这样
在这里插入图片描述
这里他说让我们安装libcurl4-openssl-dev,那我们就退出去直接安装

$ sudo apt-get install libcurl4-openssl-dev

其他错误都是用这种方法解决

我遇到的hbase异常以及解决方法

异常现象为: 启动和关闭hbase进程正常,hbase shell命令进入后,list命令和status命令正常,但是create ‘t1’,'t1’命令(创建表)时抛异常:ERROR: org.apache.hadoop.hbase.PleaseHoldException: Master is initializing 查看hbase-master-service-slave.log文件有大量以下WARN信息: WARN [master/hadoop72:16000:becomeActiveMaster] master.HMaster: hbase:meta,1.1588230740 is NOT online; state={1588230740 state=OPEN, ts=1560231893015, server=hadoop75,16020,1560231583387}; ServerCrashProcedures=false. Master startup cannot progress, in holding-pattern until region onlined.
解决方法:
1、时间没同步,date -R查看每个节点机器的时间,看误差是否在30秒内
2、查看hbase-site.xml中参数hbase.rootdir的值,需要放在hdfs上,且主机名和端口号需与hadoop中的core-site.xml中参数fs.defaultFS的值保持一致
3、修改每个主机的主机名映射,即/etc/hosts文件
4、注意hbase和hadoop的版本匹配问题,将hadoop下的hadoop-xxxx.jar替换掉hbase/lib下的hadoop-xxxx.jar————这项无稽之谈,替换后彻底启动不了hbase进程了,其实查看hbase官网的版本匹配表就OK了,无需手动替换jar包
5、将hadoop下的core-site.xml和hdfs-site.xml复制到hbase/conf目录下
6、清空hbase.rootdir,hbase.tmp.dir目录下的文件,删除zookeeper/conf/zoo.cfg中设置的dataDir目录下的version-2文件夹————照办了,但是异常依然存在
7、最后stop-hbase.sh后,zookeeper-3.4.14/bin/zkCli.sh命令进入zookeeper集群客户端,ls /命令查看zk注册信息,rmr /hbase命令删除已经存在的hbase注册信息,再start-hbase.sh重启hbase进程,问题解决。

解决方法转载至这里https://blog.csdn.net/dream_bin/article/details/88343000

至此所有遇到的坑都罗列出来了
如有错误,请在评论指出,还有任何问题也可以在评论区发出来,大家一起学习进步,共同进步

  • 3
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值