Windows环境安装Hadoop|HBase
1、前提知识
1、HBase 是构建在 HDFS 之上的,它能够为大型表提供快速的记录查找和更新。HBase 在内部将数据放入带索引的"存储文件"中以便于快速查找,而这些文件存放在 HDFS 上。
2、HBase的伪分布模式是依赖于HDFS的,因此在安装HBase之前需要安装匹配版本的Hadoop。
3、此篇文章搭建版本:hadoop-3.1.4、hbase-2.2.7、
2、Hadoop搭建
Hadoop版本为hadoop-2.8.4 下载链接: http://hadoop.apache.org https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/ hadoopon windows-master.zip {能支持在windows运行hadoop的工具} 下载链接: 链接: https://pan.baidu.com/s/1ojjEpp75DgZuEgmPcEtP1w 提取码: f5js 使用hadooponwindows-master的bin和etc替换hadoop2.7.7的bin和etc
2.1、Hadoop搭建步骤
1、解压安装包,到指定目录
1-1、比如:D:\hadoop
2、环境变量的设置
4-1、添加HADOOP_HOME: D:\hadoop [注意:不要带有空格的路径名下,否则会报找不到JDK错误]
4-2、添加PATH:;%HADOOP_HOME%\bin;%HADOOP_HOME%\lib;
3、修改启动类文件
3-1、hbase-env.cmd,指定JAVA_HOME
3-2、修改示例
set JAVA_HOME=D:\Java\jdk1.8.0_171
4、修改配置文件[\etc\hadoop目录下]
4-1、修改hdfs-site.xml文件
4-1-1、修改路径为hadoop下的namenode和datanode
4-1-2、修改示例:
dfs.namenode.name.dir
/E:/Hadoop2.7.7/hadoop-2.7.7/data/namenode
dfs.datanode.data.dir
/E:/Hadoop2.7.7/hadoop-2.7.7/data/datanode
<configuration>
<!-- 这个参数设置为1,因为是单机版hadoop -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!-- 注意:windows目录路径要改成使用正斜杠,且磁盘名称最前面也需要一个正斜杠 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/E:/tools/hadoop-3.1.2/hadoop-3.1.2/data/dfs/namenode</value>
<property>
<name>dfs.datanode.data.dir</name>
<value>/E:/tools/hadoop-3.1.2/hadoop-3.1.2/data/dfs/datanode</value>
</property>
</configuration>
4-2、修改core-site.xml
4-2-1、修改示例:
<configuration>
<!-- 存放临时数据的目录,即包括NameNode的数据 -->
<!-- 注意:windows目录路径要改成使用正斜杠,且磁盘名称最前面也需要一个正斜杠 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/D:/dev/hadoop-2.5.2/workplace/tmp</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/D:/dev/hadoop-2.5.2/workplace/name</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
4-3、修改mapred-site.xml(没有就将mapred-site.xml.template重命名为mapred-site.xml)文件 4-3-1、修改示例
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>hdfs://localhost:9001</value>
</property>
</configuration>
4-4、修改yarn-site.xml
4-4-1、修改示例
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<!-- nodemanager要求的内存最低为1024/1G -->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>1</value>
</property>
</configuration>
5、新建文件夹
5-1、在E:\Hadoop-2.7.7目录下 添加tmp文件夹
5-2、在E:/Hadoop2.7.7/hadoop-2.7.7/添加data和namenode,datanode子文件夹
6、文件拷贝
6-1、下载到的hadooponwindows-master.zip,解压,将bin目录(包含以下.dll和.exe文件)文件替换原来hadoop目录下的bin目录;
6-2、把\hadoop\bin\hadoop.dll拷贝到 C:\Windows\System32文件夹中,不然在window平台使用MapReduce测试时报错。
7、启动hadoop:
7-1、启动format成功,进行节点格式化: {Hadoop的bin目录下}
输入hdfs namenode -format,看到seccessfully就说明format成功
7-2、启动hadoop集群: {Hadoop的sbin目录下}
7-2-1、\hadoop\sbin\,输入start-all命令
7-2-2、回启动四个窗口
-- 这时会启动namenode,、datanode、resourcemanager、nodemanager
8、测试
8-1、打开cmd,输入hadoop version
8-2、输入jsp,查看运行的所有节点
8-3、访问hadoop的web界面
http://localhost:50070
8-4、访问yarn的web界面,能正常展示,则说明搭建成功
http://localhost:8088
9、关闭hadoop
9-1、\hadoop\sbin\,输入stop-all命令
2.2、特殊情况-说明
1、解压压缩包时,报:无法创建符号链接,xxx,您可能需要以管理器身份运行WinRAR
1-1、则用管理员身份进行解压,cd到压缩包所在文件夹下,执行下面的命令
-- start winrar x -y hadoop-3.1.3.tar.gz
2、解压完之后,查看解压目录的bin目录中,是否有winutis.exe和hadoop.dll文件
2-1、https://github.com/s911415/apache-hadoop-3.1.0-winutils
3、如果后续要安装Spark,那么最好安装和Spark版本对应的Hadoop版本
查看hadoop/spark对应版本:http://spark.apache.org/downloads.html
2.3、HDFS操作测试-示例
1、创建目录:
C:\Windows\system32> hadoop fs -mkdir hdfs://localhost:9000/my/
C:\Windows\system32> hadoop fs -mkdir hdfs://localhost:9000/my/testinput
2、上传文件:
C:\Windows\system32> hadoop fs -put D:\test01.txt hdfs://localhost:9000/my/testinput
C:\Windows\system32> hadoop fs -put D:\test02.txt hdfs://localhost:9000/my/testinput
3、查询文件:
C:\Windows\system32> hadoop fs -ls hdfs://localhost:9000/my/testinput
2.4、HDFS-自带Web UI管理页面
1、资源管理(http://localhost:8088/cluster)
2、节点管理(http://localhost:50070/dfshealth.html#tab-overview)
2.4.1、HDFS-自带Web UI管理页面-使用示例-查看上传的文件
2.5、Hadoop搭建-访问验证搭建连接测试
http://localhost:50070/dfshealth.html#tab-overview
http://localhost:8088/cluster
2.6、Hadoop搭建-遇错记录
1、问题1:
1-1、报错信息:ERROR datanode.DataNode: Exception in secureMain
org.apache.hadoop.util.DiskChecker$DiskErrorException: Too many failed volumes - current valid volumes: 0, volumes configured: 1, volumes failed: 1, volume failures tolerated: 0
1-2、解决方式:删除提前手动建立的data文件夹,让hadoop自己创建。
2、问题2:
2-1、报错信息:java.lang.NoClassDefFoundError:/org/apache/hadoop
/yarn/server/timelineCollectorManager ,
2-2、解决方式:
2-2-1、这个错误主要是缺少timelineCollectorManager的jar包,下载该架包,放到yarn下的lib文件夹下即可。
-- jar依赖下载地址:https://mvnrepository.com
2-2-2、或者hadoop3.0.3 版本将share\hadoop\yarn\timelineservice\hadoop-yarn-server-timelineservice-3.0.3.jar 放到share\hadoop\yarn\lib 下也可以。
3、问题3:
3-1、报错信息:The ServiceName: mapreduce.shuffle set in yarn.nodemanager.aux-services is invalid.
3-2、问题原因:
yarn.nodemanager.aux-services的值在高版本的Hadoop中只能包含a-zA-Z0-9_,不能以数字开头.
3-3、解决方式:
修改yarn-site.xml配置,改为:
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
4、问题4:
4-1、报错信息:java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows
4-2、问题原因:hadoop.dll文件跟系统不匹配
4-3、解决方式:
4-3-1、主动代码加载hadoop.dll文件,排查是否为32位还是64位的文件
-- 代码示例
public static void main(String[] args) {
try {
System.load("D:/hadoop/hadoop-3.1.4/bin/hadoop.dll");
} catch (UnsatisfiedLinkError e) {
System.err.println("Native code library failed to load.\n" + e);
System.exit(1);
}
}
4-3-2、下载与系统匹配的hadoop.dll文件,复制到hadoop.xxx/bin和x:/Windows/System32文件夹下。
-- https://github.com/search?q=winutils
5、问题5:
5-1、报错信息:无法访问localhost:50070
5-2、解决方式:修改hdfs-site.xml,增加如下配置:
<property>
<name>dfs.http.address</name>
<value>localhost:50070</value>
</property>
6、问题6:
6-1、报错信息:启动yarn nodemanager失败
6-2、问题原因:是winutil文件夹需要跟hadoop版本3.1.1一致的源码编译的包
6-3、解决方式:到GITHUB找到跟Hadoop同一版本的winutil文件
2.7、Hadoop搭建-博客资料
https://www.cnblogs.com/yifengjianbai/p/8258898.html https://baijiahao.baidu.com/s?id=1631225218387105313&wfr=spider&for=pc https://blog.csdn.net/qinlan1994/article/details/90413243 https://blog.csdn.net/qq_35535690/article/details/81976032 https://www.jianshu.com/p/aa8cfaa26790 https://zhuanlan.zhihu.com/p/29362852
3、HBase搭建
下载的HBase版本为HBase-2.0.2 https://hbase.apache.org/downloads.html
3.1、HBase搭建步骤-简介
1、解压安装包,到指定目录
1-1、比如:D:\hbase
2、修改配置文件
2-1、./hbase/conf/hbase-site.xml
2-2、配置文件内容-示例
<configuration>
<!-- hbase.cluster.distribute是指HBase以分布式模式进行,这个功能在win下不支持,写成false,否则无法启动 -->
<property>
<name>hbase.cluster.distributed</name>
<value>false</value>
</property>
<!-- 本地文件系统上的临时目录 -->
<property>
<name>hbase.tmp.dir</name>
<value>D:/hbase-2.2.7/tmp</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
<!-- 指向您的HDFS实例的地址 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://localhost:9000/hbase</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>D:/hbase-2.2.7/zoo</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>false</value>
</property>
<!-- WAL提供商 -->
<property>
<name>hbase.wal.provider</name>
<value>filesystem</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!-- ZooKeeper集合中服务器的逗号分隔列表 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>127.0.0.1</value>
</property>
</configuration>
3、修改启动类文件
3-1、hbase-env.cmd,指定JAVA_HOME
3-2、修改示例:
set JAVA_HOME=${JAVA_HOME}
#暂且先不用内置zookeeper
#set HBASE_MANAGES_ZK=false
4、环境变量的设置
4-1、添加HABSE_HOME: D:\hbase
4-2、添加PATH:;%HBASE_HOME%\bin
5、启动HBase服务{启动没报错,则说明HBase环境搭建好了}
5-1、注意:在启动HBase之前,得先启动Hadoop
5-2、启动HBase服务:{D:\hbase-2.2.7\bin}
-- start-hbase.cmd
-- jps 查看是否存在HMaster
-- 通过hadoop fs -ls/hbase查看,检查一下HDFS上是否有HBase产生的文件
5-3、启动没报错,则说明安装成功
6、退出HBase
6-1、使用quit命令进行退出
7、关闭Hbase服务
7-2、在终端输入stop-hbse.cmd命令
3.2、Hbase搭建-遇错记录
1、问题1:
1-1、报错信息:This file has been superceded by packaging our ruby files into a jar and using jruby's bootstrapping to invoke them. If you need to source this file fo some reason it is now named 'jar-bootstrap.rb' and is located in the root of the file hbase-shell.jar and in the source tree at 'hbase-shell/src/main/ruby'.
1-2、解决方式:
我使用的是hadoop3.1.4和hbase2.4.2,把hbase换成2.2.6解决。
2、问题2:
2-1、报错信息:[ERROR] Terminal initialization failed; falling back to unsupported
java.lang.NoClassDefFoundError: Could not initialize class org.fusesource.jansi.internal.Kernel32
2-2、解决方式:缺少jansi-1.7.jar包导致的,下载jansi-1.7.jar包放到hbase-2.2.7\lib下,重新启动即可。
2-2-1、jar包下载地址:https://mvnrepository.com/artifact/org.fusesource.jansi/jansi
3、问题3:
3-1、报错信息:This is not implemented yet. Stay tuned.
3-2、问题原因:由于在windows环境启动时,不允许使用分布式的zk。
3-3、解决方式:需要把上面配置文件./hbase/conf/hbase-site.xml中的hbase.cluster.distribute改成false即可。
4、问题4:
4-1、进行hbase shell操作时,报:SyntaxError: (hbase):6: syntax error, unexpected tSTRING_BEG
4-2、考虑是命令语法的错误,检查命令语句:有没有缺失引号之类的。
3.3、HBase Shell操作验证-示例
1、HBase启动后,在xxx/bin目录下用cmd窗口操作
2、Shell启动命令:hbase shell
3、HBase Shell操作示例: {注意,表名,行,列都必须用[引号]引起来。}
3-1、创建namespace
-- create_namespace 'testspace'
3-2、创建表
3-2-1、创建表-语法:
-- create '[namespace:]table_name'
3-2-2、创建表-示例
-- create 'testspace:testtable1',{NAME=>'f1',VERSIONS=>5}
-- 在hbase中=>符号表示等于
-- f1表示列簇
-- VERSIONS=>5,表示同时能够存储的版本数
-- [!!!]建表时要指定一个列簇,一个列簇就是一个大括号,可以指定多个列簇,一个大括号中只能指定一个NAME.
3-3、插入数据
3-3-1、插入数据-语法
-- put '[namespace:]table_name','rowkey','列簇:列','插入的值'
3-3-2、插入数据-示例
-- put 'testspace:testtable1','20210506_10001','f1:name','zhangsan'
-- '20210506_10001' : 代表rowkey
-- 'f1:name' : 代表列族前缀+列限定符后缀
-- 'zhangsan' :代表具体插入的值
3-4、查询数据
3-4-1、一个rowkey可能有多个列簇,可以指定列簇进行查询。
3-4-2、查询数据-示例:
-- get 'testspace:testtable1','20210506_10001'
3.4、HBase-自带Web UI管理页面-简介
1、HBase-自带Web UI管理页面-访问地址
http://localhost:16010/master-status
2、基本功能操作有:Master、Region Servers、tables、Logs
3.5、HBase搭建-博客资料
https://www.pianshen.com/article/25521893048/ https://baijiahao.baidu.com/s?id=1631231582763493960&wfr=spider&for=pc
4、HBase Shell-操作示例
#创建测试表
create 'ngfe_test_data',{NAME=>'f',VERSIONS=>1}
#查看表是否存在
exists 'ngfe_test_data'
#查看数据中所有的表
list
#查看指定表的列族信息
#describe 命令描述了表的详细结构,包括有多少个列族、每个列族的参数信息,这些显示的参数都可以使用 alter 命令进行修改
describe 'ngfe_test_data'
#插入数据: rowkey是根据一定的规则生成的
put '[namespace:]tableName','rowKey',columnFamily:column','columnValue','tempstamp'
put 'ngfe_test_data','10a_123456','f:name','zhangsan'
put 'ngfe_test_data','10a_123456','f:age','22'
put 'ngfe_test_data','10a_123456','f:area','china'
put 'ngfe_test_data','333_654321','f:name','wangwu'
put 'ngfe_test_data','333_654321','f:age','25'
put 'ngfe_test_data','333_654321','f:area','korea'
#获取数据
get 'ngfe_test_data','10a_123456'
get 'ngfe_test_data','333_654321'
#删除数据
#delete: 最小粒度是单元格(Cell),
#而且不能跨列族操作,如果需要删除表中所有列族在某一行的数据(删除表中一个逻辑行),则需要使用 deleteall 命令
delete 'ngfe_test_data','10a_123456','f:name'
delete 'ngfe_test_data','10a_123456'
#其他,待续.......