Windows环境安装Hadoop|HBase

1、前提知识

  1. 1HBase 是构建在 HDFS 之上的,它能够为大型表提供快速的记录查找和更新。HBase 在内部将数据放入带索引的"存储文件"中以便于快速查找,而这些文件存放在 HDFS 上。
  2. 2HBase的伪分布模式是依赖于HDFS的,因此在安装HBase之前需要安装匹配版本的Hadoop
  3. 3、此篇文章搭建版本:hadoop-3.1.4hbase-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、解压安装包,到指定目录
  2. 1-1、比如:D:\hadoop
  3. 2、环境变量的设置
  4. 4-1、添加HADOOP_HOME: D:\hadoop [注意:不要带有空格的路径名下,否则会报找不到JDK错误]
  5. 4-2、添加PATH:;%HADOOP_HOME%\bin;%HADOOP_HOME%\lib;
  6. 3、修改启动类文件
  7. 3-1hbase-env.cmd,指定JAVA_HOME
  8. 3-2、修改示例
  9. set JAVA_HOME=D:\Java\jdk1.8.0_171
  10. 4、修改配置文件[\etc\hadoop目录下]
  11. 4-1、修改hdfs-site.xml文件
  12. 4-1-1、修改路径为hadoop下的namenodedatanode
  13. 4-1-2、修改示例:
  14. dfs.namenode.name.dir
  15. /E:/Hadoop2.7.7/hadoop-2.7.7/data/namenode
  16. dfs.datanode.data.dir
  17. /E:/Hadoop2.7.7/hadoop-2.7.7/data/datanode
  18. <configuration>
  19. <!-- 这个参数设置为1,因为是单机版hadoop -->
  20. <property>
  21. <name>dfs.replication</name>
  22. <value>1</value>
  23. </property>
  24. <!-- 注意:windows目录路径要改成使用正斜杠,且磁盘名称最前面也需要一个正斜杠 -->
  25. <property>
  26. <name>dfs.namenode.name.dir</name>
  27. <value>/E:/tools/hadoop-3.1.2/hadoop-3.1.2/data/dfs/namenode</value>
  28. <property>
  29. <name>dfs.datanode.data.dir</name>
  30. <value>/E:/tools/hadoop-3.1.2/hadoop-3.1.2/data/dfs/datanode</value>
  31. </property>
  32. </configuration>
  33. 4-2、修改core-site.xml
  34. 4-2-1、修改示例:
  35. <configuration>
  36. <!-- 存放临时数据的目录,即包括NameNode的数据 -->
  37. <!-- 注意:windows目录路径要改成使用正斜杠,且磁盘名称最前面也需要一个正斜杠 -->
  38. <property>
  39. <name>hadoop.tmp.dir</name>
  40. <value>/D:/dev/hadoop-2.5.2/workplace/tmp</value>
  41. </property>
  42. <property>
  43. <name>dfs.name.dir</name>
  44. <value>/D:/dev/hadoop-2.5.2/workplace/name</value>
  45. </property>
  46. <property>
  47. <name>fs.default.name</name>
  48. <value>hdfs://localhost:9000</value>
  49. </property>
  50. </configuration>
  51. 4-3、修改mapred-site.xml(没有就将mapred-site.xml.template重命名为mapred-site.xml)文件 4-3-1、修改示例
  52. <configuration>
  53. <property>
  54. <name>mapreduce.framework.name</name>
  55. <value>yarn</value>
  56. </property>
  57. <property>
  58. <name>mapred.job.tracker</name>
  59. <value>hdfs://localhost:9001</value>
  60. </property>
  61. </configuration>
  62. 4-4、修改yarn-site.xml
  63. 4-4-1、修改示例
  64. <configuration>
  65. <property>
  66. <name>yarn.nodemanager.aux-services</name>
  67. <value>mapreduce_shuffle</value>
  68. </property>
  69. <property>
  70. <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
  71. <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  72. </property>
  73. <!-- nodemanager要求的内存最低为1024/1G -->
  74. <property>
  75. <name>yarn.nodemanager.resource.memory-mb</name>
  76. <value>1024</value>
  77. </property>
  78. <property>
  79. <name>yarn.nodemanager.resource.cpu-vcores</name>
  80. <value>1</value>
  81. </property>
  82. </configuration>
  83. 5、新建文件夹
  84. 5-1、在E:\Hadoop-2.7.7目录下 添加tmp文件夹
  85. 5-2、在E:/Hadoop2.7.7/hadoop-2.7.7/添加datanamenodedatanode子文件夹
  86. 6、文件拷贝
  87. 6-1、下载到的hadooponwindows-master.zip,解压,将bin目录(包含以下.dll和.exe文件)文件替换原来hadoop目录下的bin目录;
  88. 6-2、把\hadoop\bin\hadoop.dll拷贝到 C:\Windows\System32文件夹中,不然在window平台使用MapReduce测试时报错。
  89. 7、启动hadoop:
  90. 7-1、启动format成功,进行节点格式化: {Hadoopbin目录下}
  91. 输入hdfs namenode -format,看到seccessfully就说明format成功
  92. 7-2、启动hadoop集群: {Hadoopsbin目录下}
  93. 7-2-1\hadoop\sbin\,输入start-all命令
  94. 7-2-2、回启动四个窗口
  95. -- 这时会启动namenode,、datanoderesourcemanagernodemanager
  96. 8、测试
  97. 8-1、打开cmd,输入hadoop version
  98. 8-2、输入jsp,查看运行的所有节点
  99. 8-3、访问hadoopweb界面
  100. http://localhost:50070
  101. 8-4、访问yarnweb界面,能正常展示,则说明搭建成功
  102. http://localhost:8088
  103. 9、关闭hadoop
  104. 9-1\hadoop\sbin\,输入stop-all命令

2.2、特殊情况-说明

  1. 1、解压压缩包时,报:无法创建符号链接,xxx,您可能需要以管理器身份运行WinRAR
  2. 1-1、则用管理员身份进行解压,cd到压缩包所在文件夹下,执行下面的命令
  3. -- start winrar x -y hadoop-3.1.3.tar.gz
  4. 2、解压完之后,查看解压目录的bin目录中,是否有winutis.exehadoop.dll文件
  5. 2-1https://github.com/s911415/apache-hadoop-3.1.0-winutils
  6. 3、如果后续要安装Spark,那么最好安装和Spark版本对应的Hadoop版本
  7. 查看hadoop/spark对应版本:http://spark.apache.org/downloads.html

2.3、HDFS操作测试-示例

  1. 1、创建目录:
  2. C:\Windows\system32> hadoop fs -mkdir hdfs://localhost:9000/my/
  3. C:\Windows\system32> hadoop fs -mkdir hdfs://localhost:9000/my/testinput
  4. 2、上传文件:
  5. C:\Windows\system32> hadoop fs -put D:\test01.txt hdfs://localhost:9000/my/testinput
  6. C:\Windows\system32> hadoop fs -put D:\test02.txt hdfs://localhost:9000/my/testinput
  7. 3、查询文件:
  8. C:\Windows\system32> hadoop fs -ls hdfs://localhost:9000/my/testinput

2.4、HDFS-自带Web UI管理页面

  1. 1、资源管理(http://localhost:8088/cluster)
  2. 2、节点管理(http://localhost:50070/dfshealth.html#tab-overview)

2.4.1、HDFS-自带Web UI管理页面-使用示例-查看上传的文件

image.png2.5、Hadoop搭建-访问验证搭建连接测试

  1. http://localhost:50070/dfshealth.html#tab-overview
  2. http://localhost:8088/cluster

2.6、Hadoop搭建-遇错记录

  1. 1、问题1
  2. 1-1、报错信息:ERROR datanode.DataNode: Exception in secureMain
  3. org.apache.hadoop.util.DiskChecker$DiskErrorException: Too many failed volumes - current valid volumes: 0, volumes configured: 1, volumes failed: 1, volume failures tolerated: 0
  4. 1-2、解决方式:删除提前手动建立的data文件夹,让hadoop自己创建。
  5. 2、问题2
  6. 2-1、报错信息:java.lang.NoClassDefFoundError:/org/apache/hadoop
  7. /yarn/server/timelineCollectorManager
  8. 2-2、解决方式:
  9. 2-2-1、这个错误主要是缺少timelineCollectorManagerjar包,下载该架包,放到yarn下的lib文件夹下即可。
  10. -- jar依赖下载地址:https://mvnrepository.com
  11. 2-2-2、或者hadoop3.0.3 版本将share\hadoop\yarn\timelineservice\hadoop-yarn-server-timelineservice-3.0.3.jar 放到share\hadoop\yarn\lib 下也可以。
  12. 3、问题3
  13. 3-1、报错信息:The ServiceName: mapreduce.shuffle set in yarn.nodemanager.aux-services is invalid.
  14. 3-2、问题原因:
  15. yarn.nodemanager.aux-services的值在高版本的Hadoop中只能包含a-zA-Z0-9_,不能以数字开头.
  16. 3-3、解决方式:
  17. 修改yarn-site.xml配置,改为:
  18. <name>yarn.nodemanager.aux-services</name>
  19. <value>mapreduce_shuffle</value>
  20. 4、问题4
  21. 4-1、报错信息:java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows
  22. 4-2、问题原因:hadoop.dll文件跟系统不匹配
  23. 4-3、解决方式:
  24. 4-3-1、主动代码加载hadoop.dll文件,排查是否为32位还是64位的文件
  25. -- 代码示例
  26. public static void main(String[] args) {
  27. try {
  28. System.load("D:/hadoop/hadoop-3.1.4/bin/hadoop.dll");
  29. } catch (UnsatisfiedLinkError e) {
  30. System.err.println("Native code library failed to load.\n" + e);
  31. System.exit(1);
  32. }
  33. }
  34. 4-3-2、下载与系统匹配的hadoop.dll文件,复制到hadoop.xxx/binx:/Windows/System32文件夹下。
  35. -- https://github.com/search?q=winutils
  36. 5、问题5
  37. 5-1、报错信息:无法访问localhost:50070
  38. 5-2、解决方式:修改hdfs-site.xml,增加如下配置:
  39. <property>
  40. <name>dfs.http.address</name>
  41. <value>localhost:50070</value>
  42. </property>
  43. 6、问题6
  44. 6-1、报错信息:启动yarn nodemanager失败
  45. 6-2、问题原因:是winutil文件夹需要跟hadoop版本3.1.1一致的源码编译的包
  46. 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、解压安装包,到指定目录
  2. 1-1、比如:D:\hbase
  3. 2、修改配置文件
  4. 2-1、./hbase/conf/hbase-site.xml
  5. 2-2、配置文件内容-示例
  6. <configuration>
  7. <!-- hbase.cluster.distribute是指HBase以分布式模式进行,这个功能在win下不支持,写成false,否则无法启动 -->
  8. <property>
  9. <name>hbase.cluster.distributed</name>
  10. <value>false</value>
  11. </property>
  12. <!-- 本地文件系统上的临时目录 -->
  13. <property>
  14. <name>hbase.tmp.dir</name>
  15. <value>D:/hbase-2.2.7/tmp</value>
  16. </property>
  17. <property>
  18. <name>hbase.unsafe.stream.capability.enforce</name>
  19. <value>false</value>
  20. </property>
  21. <!-- 指向您的HDFS实例的地址 -->
  22. <property>
  23. <name>hbase.rootdir</name>
  24. <value>hdfs://localhost:9000/hbase</value>
  25. </property>
  26. <property>
  27. <name>hbase.zookeeper.property.dataDir</name>
  28. <value>D:/hbase-2.2.7/zoo</value>
  29. </property>
  30. <property>
  31. <name>hbase.cluster.distributed</name>
  32. <value>false</value>
  33. </property>
  34. <!-- WAL提供商 -->
  35. <property>
  36. <name>hbase.wal.provider</name>
  37. <value>filesystem</value>
  38. </property>
  39. <property>
  40. <name>dfs.replication</name>
  41. <value>1</value>
  42. </property>
  43. <!-- ZooKeeper集合中服务器的逗号分隔列表 -->
  44. <property>
  45. <name>hbase.zookeeper.quorum</name>
  46. <value>127.0.0.1</value>
  47. </property>
  48. </configuration>
  49. 3、修改启动类文件
  50. 3-1hbase-env.cmd,指定JAVA_HOME
  51. 3-2、修改示例:
  52. set JAVA_HOME=${JAVA_HOME}
  53. #暂且先不用内置zookeeper
  54. #set HBASE_MANAGES_ZK=false
  55. 4、环境变量的设置
  56. 4-1、添加HABSE_HOME: D:\hbase
  57. 4-2、添加PATH:;%HBASE_HOME%\bin
  58. 5、启动HBase服务{启动没报错,则说明HBase环境搭建好了}
  59. 5-1、注意:在启动HBase之前,得先启动Hadoop
  60. 5-2、启动HBase服务:{D:\hbase-2.2.7\bin}
  61. -- start-hbase.cmd
  62. -- jps 查看是否存在HMaster
  63. -- 通过hadoop fs -ls/hbase查看,检查一下HDFS上是否有HBase产生的文件
  64. 5-3、启动没报错,则说明安装成功
  65. 6、退出HBase
  66. 6-1、使用quit命令进行退出
  67. 7、关闭Hbase服务
  68. 7-2、在终端输入stop-hbse.cmd命令

3.2、Hbase搭建-遇错记录

  1. 1、问题1
  2. 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'.
  3. 1-2、解决方式:
  4. 我使用的是hadoop3.1.4hbase2.4.2,把hbase换成2.2.6解决。
  5. 2、问题2
  6. 2-1、报错信息:[ERROR] Terminal initialization failed; falling back to unsupported
  7. java.lang.NoClassDefFoundError: Could not initialize class org.fusesource.jansi.internal.Kernel32
  8. 2-2、解决方式:缺少jansi-1.7.jar包导致的,下载jansi-1.7.jar包放到hbase-2.2.7\lib下,重新启动即可。
  9. 2-2-1jar包下载地址:https://mvnrepository.com/artifact/org.fusesource.jansi/jansi
  10. 3、问题3
  11. 3-1、报错信息:This is not implemented yet. Stay tuned.
  12. 3-2、问题原因:由于在windows环境启动时,不允许使用分布式的zk
  13. 3-3、解决方式:需要把上面配置文件./hbase/conf/hbase-site.xml中的hbase.cluster.distribute改成false即可。
  14. 4、问题4
  15. 4-1、进行hbase shell操作时,报:SyntaxError: (hbase):6: syntax error, unexpected tSTRING_BEG
  16. 4-2、考虑是命令语法的错误,检查命令语句:有没有缺失引号之类的。

3.3、HBase Shell操作验证-示例

  1. 1HBase启动后,在xxx/bin目录下用cmd窗口操作
  2. 2Shell启动命令:hbase shell
  3. 3HBase Shell操作示例: {注意,表名,行,列都必须用[引号]引起来。}
  4. 3-1、创建namespace
  5. -- create_namespace 'testspace'
  6. 3-2、创建表
  7. 3-2-1、创建表-语法:
  8. -- create '[namespace:]table_name'
  9. 3-2-2、创建表-示例
  10. -- create 'testspace:testtable1',{NAME=>'f1',VERSIONS=>5}
  11. -- hbase中=>符号表示等于
  12. -- f1表示列簇
  13. -- VERSIONS=>5,表示同时能够存储的版本数
  14. -- [!!!]建表时要指定一个列簇,一个列簇就是一个大括号,可以指定多个列簇,一个大括号中只能指定一个NAME.
  15. 3-3、插入数据
  16. 3-3-1、插入数据-语法
  17. -- put '[namespace:]table_name','rowkey','列簇:列','插入的值'
  18. 3-3-2、插入数据-示例
  19. -- put 'testspace:testtable1','20210506_10001','f1:name','zhangsan'
  20. -- '20210506_10001' 代表rowkey
  21. -- 'f1:name' : 代表列族前缀+列限定符后缀
  22. -- 'zhangsan' :代表具体插入的值
  23. 3-4、查询数据
  24. 3-4-1、一个rowkey可能有多个列簇,可以指定列簇进行查询。
  25. 3-4-2、查询数据-示例:
  26. -- get 'testspace:testtable1','20210506_10001'

3.4、HBase-自带Web UI管理页面-简介

  1. 1HBase-自带Web UI管理页面-访问地址
  2. http://localhost:16010/master-status
  3. 2、基本功能操作有:MasterRegion ServerstablesLogs

3.5、HBase搭建-博客资料

https://www.pianshen.com/article/25521893048/ https://baijiahao.baidu.com/s?id=1631231582763493960&wfr=spider&for=pc

4、HBase Shell-操作示例

  1. #创建测试表
  2. create 'ngfe_test_data',{NAME=>'f',VERSIONS=>1}
  3. #查看表是否存在
  4. exists 'ngfe_test_data'
  5. #查看数据中所有的表
  6. list
  7. #查看指定表的列族信息
  8. #describe 命令描述了表的详细结构,包括有多少个列族、每个列族的参数信息,这些显示的参数都可以使用 alter 命令进行修改
  9. describe 'ngfe_test_data'
  10. #插入数据: rowkey是根据一定的规则生成的
  11. put '[namespace:]tableName','rowKey',columnFamily:column','columnValue','tempstamp'
  12. put 'ngfe_test_data','10a_123456','f:name','zhangsan'
  13. put 'ngfe_test_data','10a_123456','f:age','22'
  14. put 'ngfe_test_data','10a_123456','f:area','china'
  15. put 'ngfe_test_data','333_654321','f:name','wangwu'
  16. put 'ngfe_test_data','333_654321','f:age','25'
  17. put 'ngfe_test_data','333_654321','f:area','korea'
  18. #获取数据
  19. get 'ngfe_test_data','10a_123456'
  20. get 'ngfe_test_data','333_654321'
  21. #删除数据
  22. #delete: 最小粒度是单元格(Cell),
  23. #而且不能跨列族操作,如果需要删除表中所有列族在某一行的数据(删除表中一个逻辑行),则需要使用 deleteall 命令
  24. delete 'ngfe_test_data','10a_123456','f:name'
  25. delete 'ngfe_test_data','10a_123456'
  26. #其他,待续.......