安装单机版 hadoop 步骤

  1. 1. 下载 需要版本的 jdk
  2. 解压放入 /usr/lib/jvm/jdk-1.8.xxxxx
  3. 配置 环境变量
  4. vim /etc/profile
  5. 添加 JAVA_HOME
  6. 2. 下载需要版本的 HADOOP 压缩包
  7. 加压放入 /usr/local/hadoopxxx 或者 /opt/modules/hadoopxxx
  8. 进入 $HADOOP_HOME/etc/hadoop/hadoop-env.sh
  9. 查看有依赖 JAVA_HOME
  10. 然后可以运行 wordcount 示例代码即可验证是否成功

搭建伪分布式集群 (至少 三台服务器)

clone 单机版后 修改 如下信息

搭建全分布式集群

配置 core-site.xml 差不多有 六个 xml 文件需要配置

分模块启动







安装 jdk 1.8

  1. # 官网下载可能比较慢,请自行搜索国内镜像源
  2. wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
  3. tar -xzvf jdk-8u191-linux-x64.tar.gz -C /usr/lib/jvm
  4. #请忽略版本信息,搬运别人的,因为我之前已经装好了
  5. 配置环境变量
  6. #vi  /etc/profile
  7. JAVA_HOME=/usr/lib/jvm/jdk1.7.0_79//自己的jdk路径
  8. JRE_HOME=$JAVA_HOME/jre //可根据需求决定是否配置
  9. PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
  10. CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
  11. export JAVA_HOME JRE_HOME PATH CLASSPATH
  12. 添加完毕保存退出
  13. source /etc/profile

下载解压 hadoop

  1. #单机版
  2. wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.8.4/hadoop-2.8.4.tar.gz
  3. tar -xzvf hadoop-2.8.4.tar.gz -C /opt/modules/hadoopstandalone/
  4. #如果此时你认为到此就结束了,那么你图样啊。。。
  5. 这时候你不妨试着 hadoop 自带的 wordcount 测试一波
  6. bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.4.jar wordcount ~/words.txt output.txtxxx
  7. # 如果报错如下:
  8. Error: JAVA_HOME is not set and could not be found.
  9. #这次并不是 jdk 本身 没有配置好环境变量,而是你需要修改 hadoop 里的 etc/hadoop/hadoop-env.sh
  10. vim etc/hadoop/hadoop-env.sh
  11. ${JAVA_HOME} 替换为你配置好的 JAVA_HOME 路径
  12. #然后重复 wordcount
  13. bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.4.jar wordcount ~/words.txt output.txtxxx
  14. # 中间可能会出现 'attempt_local1221950113_0001_r_000000_0' to file:/opt/modules/hadoopstandalone/hado ,证明 确实是本地模式跑的
  15. # 伪分布式版
  16. #配置 namenode (core-site.xml) 文件
  17. 注意下面 所有 file:// 这种的 路径最好 mkdir -p xxx 执行下,不然启动时候可能会找不到路径的
  18. # hadoop_home 目录下 的 etc/ 下
  19. <configuration>
  20. <!-- 指定HDFS老大(namenode)的通信地址 -->
  21. <property>
  22. <name>fs.defaultFS</name>
  23. <value>hdfs://master:9000</value>
  24. </property>
  25. <!-- 指定hadoop运行时产生文件的存储路径 -->
  26. <property>
  27. <name>hadoop.tmp.dir</name>
  28. <value>file:///usr/hadoop/hadoop-2.8.4/tmp</value>
  29. </property>
  30. <!--用来设置检查点备份日志的最长时间-->
  31. <property>
  32. <name>fs.checkpoint.period</name>
  33. <value>3600</value>
  34. </property>
  35. </configuration>
  36. hdfs-site.xml
  37. <configuration>
  38. <!--指定hdfs保存数据的副本数量-->
  39. <property>
  40. <name>dfs.replication</name>
  41. <value>2</value>
  42. </property>
  43. <!--指定hdfsnamenode的存储位置-->
  44. <property>
  45. <name>dfs.namenode.name.dir</name>
  46. <value>file:///usr/hadoop/hadoop-2.8.4/tmp/dfs/name</value>
  47. </property>
  48. <!--指定hdfsdatanode的存储位置-->
  49. <property>
  50. <name>dfs.datanode.data.dir</name>
  51. <value>file:///usr/hadoop/hadoop-2.8.4/tmp/dfs/data</value>
  52. </property>
  53. </configuration>
  54. ~
  55. 三、 mapred-site.xml
  56. <configuration>
  57. <!--告诉hadoop以后MR(Map/Reduce)运行在YARN上-->
  58. <property>
  59. <name>mapreduce.framework.name</name>
  60. <value>yarn</value>
  61. </property>
  62. </configuration>
  63. 四、 yarn-site.xml
  64. <configuration>
  65. <!--nomenodeManager获取数据的方式是shuffle-->
  66. <property>
  67. <name>yarn.nodemanager.aux-services</name>
  68. <value>mapreduce_shuffle</value>
  69. </property>
  70. <!--指定Yarn的老大(ResourceManager)的地址-->
  71. <property>
  72. <name>yarn.resourcemanager.hostname</name>
  73. <value>master</value>
  74. </property>
  75. <!--Yarn打印工作日志-->
  76. <property>
  77. <name>yarn.log-aggregation-enable</name>
  78. <value>true</value>
  79. </property>
  80. <configuration>
  81. #这里提一下 上面 master 的配置 实际上是 覆写了 namenode 节点的 /etc/hosts 文件,本实验虚拟机采用NAT , namenode 与 datanode 均需覆写hosts文件以此达到通信的目的,还# 此外还需要配置 SSH 免密通信
  82. [root@master hadoop]# cat /etc/hosts
  83. 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
  84. ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
  85. 192.168.32.128 node1
  86. 192.168.32.129 master
  87. 192.168.32.130 node2
  1. 首次 格式化 hdfs 存储 ,尼玛,这里是中文横杠,最好拷贝下面命令执行。。。
  2. hdfs namenode -format

测试是否安装成功,启动 hadoop

  1. cd /opt/modules/hadoopstandalone/hadoop-2.8.4/sbin
  2. ./start-all.sh
  3. # 会提示这种启动方法过时了 This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
  4. # 这时你可以选择用新的替代方法
  5. ./stop-all.sh
  6. # 会提示这种启动方法过时了 This script is Deprecated. Instead use stop-dfs.sh and stop-yarn.sh
  7. # 这时你可以选择用新的替代方法
  8. # 再次重启
  9. ./start-all.sh
  10. # 出现下面这种结果就 ok 了 jps 查看一下 有下面的 就 ok 了
  11. [root@master logs]# jps
  12. 67761 DataNode
  13. 67953 SecondaryNameNode
  14. 1537 AmbariServer
  15. 68515 Jps
  16. 68135 ResourceManager
  17. 68248 NodeManager
  18. 67615 NameNode
  19. 如果失败,一般都是 namenode 没有启动成功,具体原因 查看 hadoop/logs/hadoop-xxx-namenode.log 即可获得(这里告诉一个我遇到的错误,就是上面 xml 文件里的那些目录没有手动建出,然后 hdfs namenode format 中间的是 中文横杠。。震惊吧!!!)。
  20. #好了 接下来 ,可以 学习 hdfs 了,其实 大部分跟linux 命令一致
  21. hdfs dfs -ls /
  22. hdfs dfs -mkdir /test
  23. 从本地拷贝到 hdfs
  24. hdfs dfs -copyFromLocal ~/ml.txt /test/
  25. [root@master sbin]# hdfs dfs -ls /test
  26. Found 1 items
  27. -rw-r--r-- 2 root supergroup 296966 2018-11-09 01:20 /test/ml.txt
  28. hdfs dfs -cat /test/ml.txt
  29. hdfs dfs -chmod 777 /test/ml.txt

安装配置 sqoop

  1. wget xxx
  2. tar -zxvf xxx.gz -C /opt/sqoop-xxx
  3. #这时候如果你进入 sqoop 的 bin 目录下执行 ./sqoop 会告诉你
  4. #Please set $HADOOP_COMMON_HOME to the root of your Hadoop installation.
  5. # 或者 Please set $HADOOP_MAPRED_HOME to the root of your Hadoop MapReduce installation.
  6. #那么不要激动,照着做就好了,编辑 sqoop 的配置文件 sqoop-env.sh ,这玩意儿本来 是 sqoop-env-template.sh,我自己改的名字
  7. vim /opt/sqoop-1.4.7.bin__hadoop-2.6.0/conf/sqoop-env.sh
  8. #配置下 hadoop 安装的路径到 sqoop 里就好
  9. #修改下面的
  10. export HADOOP_COMMON_HOME=/opt/modules/hadoopstandalone/hadoop-2.8.4
  11. #Set path to where hadoop-*-core.jar is available
  12. export HADOOP_MAPRED_HOME=/opt/modules/hadoopstandalone/hadoop-2.8.4

hdfs shell 命令 与 普通shell 常用 操作大同小异

python 操作 hdfs hdfs3 模块

  1. # -*- coding: utf-8 -*-
  2. __author__ = 'Frank Li'
  3. from __future__ import unicode_literals
  4. from hdfs3 import HDFileSystem
  5. test_host = '192.168.32.129'
  6. test_port = '9000'
  7. def hdfs_exists(hdfs_client,path):
  8. if hdfs_client.exists(path):
  9. hdfs_client.rm(path)
  10. hdfs_client.mkdir(path)
  11. def hdfs_write_read(hdfs_client,fname):
  12. data = b'hello hadoop'
  13. with hdfs_client.open(fname,'wb',replication=1) as f:
  14. f.write(data)
  15. with hdfs_client.open(fname,'rb') as f:
  16. out = f.read(len(data))
  17. assert out == data
  18. def hdfs_read_write(hdfs_client,file):
  19. with hdfs_client.open(file,'rb') as f:
  20. for line in f:
  21. print(line)
  22. if __name__ == '__main__':
  23. hdfs_client = HDFileSystem()
  24. path = '/test/subtest/'
  25. hdfs_exists(hdfs_client,path)
  26. file = '/test/ml.txt'
  27. hdfs_write_read(hdfs_client,file)
  28. hdfs_read_write(hdfs_client,file)
  29. hdfs_client.disconnect()

yarn map --> reduce



手写一个 python 简单版的 map reduce 并放置于 hadoop 框架中运行

map 小脚本 hdfs_map.py

  1. __author__ = 'Frank Li'
  2. import sys
  3. def read_input(stream):
  4. for line in stream:
  5. yield line.rstrip().split(',')
  6. def main():
  7. data = read_input(sys.stdin)
  8. for word in data:
  9. for w in word:
  10. print('{}\t{}'.format(w,1))
  11. if __name__ == '__main__':
  12. main()

reduce 小脚本 hdfs_reduce.py

  1. import sys
  2. from operator import itemgetter
  3. from itertools import groupby
  4. def read_mapper_out(file,separator='\t'):
  5. for line in file:
  6. yield line.rstrip().split(separator,1)
  7. def main():
  8. data = read_mapper_out(sys.stdin)
  9. for current_word, group in groupby(data,itemgetter(0)):
  10. total_count = sum(int(count) for current_word, count in group)
  11. print('{}\t{}'.format(current_word,total_count))
  12. if __name__ == '__main__':
  13. main()

在linux 中 试验

放到 hdfs 上试验

  1. /opt/modules/hadoopstandalone/hadoop-2.8.4/bin/hadoop jar /opt/modules/hadoopstandalone/hadoop-2.8.4/share/hadoop/tools/lib/hadoop-streaming-2.8.4.jar -files "hdfs_map.py,hdfs_reduce.py" -input /test/words.txt -output /tmp/wordcounttest -mapper "/home/yli/anaconda3/envs/py35/bin/python hdfs_map.py" -reducer "/home/yli/anaconda3/envs/py35/bin/python hdfs_reduce.py"

虚拟机伪分布式是很慢的。。。 0% 0%

emm...三分钟过去了, 终于完成了

查看结果















hbase

zookeeper 下载安装

  1. wget https://mirrors.cnnic.cn/apache/zookeeper/stable/zookeeper-3.4.12.tar.gz
  2. tar -xzvf zookeeper-3.4.12.tar.gz -C /opt/modules/

当年全是虚,从今当务实...

绕不开的hadoop的更多相关文章

  1. Unity应用架构设计(10)————绕不开的协程和多线程(Part 1)

    在进入本章主题之前,我们必须要了解客户端应用程序都是单线程模型,即只有一个主线程(Main Thread),或者叫做UI线程,即所有的UI控件的创建和操作都是在主线程上完成的.而服务器端应用程序,也就 ...

  2. 一步一步从原理跟我学邮件收取及发送 2.邮箱的登录和绕不开的base64

    一步一步从原理跟我学邮件收取及发送 2.邮箱的登录和绕不开的base64 好了,经过本系列上一篇文章 "1.网络命令的发送",假设大家已经掌握了 email 电子邮件的命令发送的方 ...

  3. Unity应用架构设计(10)——绕不开的协程和多线程(Part 1)

    在进入本章主题之前,我们必须要了解客户端应用程序都是单线程模型,即只有一个主线程(Main Thread),或者叫做UI线程,即所有的UI控件的创建和操作都是在主线程上完成的.而服务器端应用程序,也就 ...

  4. 了解SSL证书从HTTPS开始 开发者绕不开的“劫”

    微信小程序上线已经有很长一段时间了,而开发者在接入小程序的过程中,会遇到一些问题,例如小程序要求必须通过HTTPS完成服务端通信,开发者需搭建HTTPS服务,进行 SSL 证书申请.部署,完成HTTP ...

  5. 谈到云原生, 绕不开"容器化"

    传送门 什么是云原生? 云原生设计理念 .NET微服务 Containers 现在谈到云原生, 绕不开"容器". 在<Cloud Native Patterns>一书中 ...

  6. c 输出9x9乘法口诀表 这个学for循环绕不开的一题

    #include<stdio.h> int main(void) { int i,j; ;i<=;i++) { ;j<=i;j++) { printf("%d*%d= ...

  7. Unity应用架构设计(10)——绕不开的协程和多线程(Part 2)

    在上一回合谈到,客户端应用程序的所有操作都在主线程上进行,所以一些比较耗时的操作可以在异步线程上去进行,充分利用CPU的性能来达到程序的最佳性能.对于Unity而言,又提供了另外一种『异步』的概念,就 ...

  8. 绕不开的this

    犹豫两秒要不要整理this,从红皮书上看了半天,没搞懂哎(弱爆了) 什么是this?this是在执行上下文创建时期创建的一个执行过程中不可改变的变量.执行上下文是指js引擎会将代码执行前需要的变量th ...

  9. Hadoop阅读笔记(七)——代理模式

    关于Hadoop已经小记了六篇,<Hadoop实战>也已经翻完7章.仔细想想,这么好的一个框架,不能只是流于应用层面,跑跑数据排序.单表链接等,想得其精髓,还需深入内部. 按照<Ha ...

随机推荐

  1. Luogu P5285 / LOJ3050 【[十二省联考2019]骗分过样例】

    伪提答害死人...(出题人赶快出来挨打!!!) 虽说是考场上全看出来是让干嘛了,然而由于太菜以及不会打表所以GG了,只拿了\(39\)... 经测试,截至\(2019.4.18-11:33\),这份接 ...

  2. [HEOI2016/TJOI2016]游戏 解题报告

    [HEOI2016/TJOI2016]游戏 看起来就是个二分图匹配啊 最大化匹配是在最大化边数,那么一条边就代表选中一个坐标内的点 但是每一行不一定只会有一个匹配 于是把点拆开,按照'#'划分一下就好 ...

  3. bzoj4240有趣的家庭菜园(贪心+逆序对)

    对家庭菜园有兴趣的JOI君每年在自家的田地中种植一种叫做IOI草的植物.JOI君的田地沿东西方向被划分为N个区域,由西到东标号为1~N.IOI草一共有N株,每个区域种植着一株.在第i个区域种植的IOI ...

  4. 关于Ubuntu18.04谷歌浏览器经常卡死的解决

    老电脑本来用的是Win系列,后来改成Linux后就不卡了,这几天同Notebook运行的Script开始复杂了,Ubuntu经常卡死(发公众号也经常卡死),本来以为是Ubuntu的问题 后来一想,不对 ...

  5. Transactional ejb 事务陷阱

    对应ejb,默认是对整个类使用事务.所以所有方法都开启事务. 而对于用TransactionAttribute注释来引用容器管理的事务,只能在第一级的方法中使用.对应类中的方法再调用其它类中方法,注释 ...

  6. apt could not get lock

    很多次遇到,就是记不住. sudo rm /var/cache/apt/archives/lock sudo rm /var/lib/dpkg/lock sudo rm /var/lib/apt/li ...

  7. LOJ#2722 情报中心

    解:有个暴力是枚举两条链然后O(n)判定,可以得到15分. 还可以优化一下,枚举一条链,然后第二条链直接求两端点树上带权距离.可以做到O(m(n + m)),但是我用的树剖,跟上面那一档没啥区别Orz ...

  8. A1134. Vertex Cover

    A vertex cover of a graph is a set of vertices such that each edge of the graph is incident to at le ...

  9. [luogu1970][花匠]

    题目地址 https://www.luogu.org/problemnew/show/P1970 题目描述 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定 把这排中的一部 ...

  10. vue学习(1)

    前置的准备学习: ES6简单语法: 1.let和const 2.模板字符串 3.箭头函数 4.对象的单体模式 5.es6的面向对象 6.模块化 1.let和const <script type= ...