绕不开的hadoop
安装单机版 hadoop 步骤
1. 下载 需要版本的 jdk
解压放入 /usr/lib/jvm/jdk-1.8.xxxxx
配置 环境变量
vim /etc/profile
添加 JAVA_HOME
2. 下载需要版本的 HADOOP 压缩包
加压放入 /usr/local/hadoopxxx 或者 /opt/modules/hadoopxxx
进入 $HADOOP_HOME/etc/hadoop/hadoop-env.sh
查看有依赖 JAVA_HOME
然后可以运行 wordcount 示例代码即可验证是否成功
搭建伪分布式集群 (至少 三台服务器)
clone 单机版后 修改 如下信息
搭建全分布式集群
配置 core-site.xml 差不多有 六个 xml 文件需要配置
分模块启动
安装 jdk 1.8
# 官网下载可能比较慢,请自行搜索国内镜像源
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"
tar -xzvf jdk-8u191-linux-x64.tar.gz -C /usr/lib/jvm
#请忽略版本信息,搬运别人的,因为我之前已经装好了
配置环境变量
#vi /etc/profile
JAVA_HOME=/usr/lib/jvm/jdk1.7.0_79//自己的jdk路径
JRE_HOME=$JAVA_HOME/jre //可根据需求决定是否配置
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH
添加完毕保存退出
source /etc/profile
下载解压 hadoop
#单机版
wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.8.4/hadoop-2.8.4.tar.gz
tar -xzvf hadoop-2.8.4.tar.gz -C /opt/modules/hadoopstandalone/
#如果此时你认为到此就结束了,那么你图样啊。。。
这时候你不妨试着 用 hadoop 自带的 wordcount 测试一波
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.4.jar wordcount ~/words.txt output.txtxxx
# 如果报错如下:
Error: JAVA_HOME is not set and could not be found.
#这次并不是 jdk 本身 没有配置好环境变量,而是你需要修改 hadoop 里的 etc/hadoop/hadoop-env.sh
vim etc/hadoop/hadoop-env.sh
将 ${JAVA_HOME} 替换为你配置好的 JAVA_HOME 路径
#然后重复 wordcount
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.4.jar wordcount ~/words.txt output.txtxxx
# 中间可能会出现 'attempt_local1221950113_0001_r_000000_0' to file:/opt/modules/hadoopstandalone/hado ,证明 确实是本地模式跑的
# 伪分布式版
#配置 namenode (core-site.xml) 文件
注意下面 所有 file:// 这种的 路径最好 mkdir -p xxx 执行下,不然启动时候可能会找不到路径的
# hadoop_home 目录下 的 etc/ 下
<configuration>
<!-- 指定HDFS老大(namenode)的通信地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储路径 -->
<property>
<name>hadoop.tmp.dir</name>
<value>file:///usr/hadoop/hadoop-2.8.4/tmp</value>
</property>
<!--用来设置检查点备份日志的最长时间-->
<property>
<name>fs.checkpoint.period</name>
<value>3600</value>
</property>
</configuration>
二 、hdfs-site.xml
<configuration>
<!--指定hdfs保存数据的副本数量-->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!--指定hdfs中namenode的存储位置-->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///usr/hadoop/hadoop-2.8.4/tmp/dfs/name</value>
</property>
<!--指定hdfs中datanode的存储位置-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///usr/hadoop/hadoop-2.8.4/tmp/dfs/data</value>
</property>
</configuration>
~
三、 mapred-site.xml
<configuration>
<!--告诉hadoop以后MR(Map/Reduce)运行在YARN上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
四、 yarn-site.xml
<configuration>
<!--nomenodeManager获取数据的方式是shuffle-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--指定Yarn的老大(ResourceManager)的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<!--Yarn打印工作日志-->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<configuration>
#这里提一下 上面 master 的配置 实际上是 覆写了 namenode 节点的 /etc/hosts 文件,本实验虚拟机采用NAT , namenode 与 datanode 均需覆写hosts文件以此达到通信的目的,还# 此外还需要配置 SSH 免密通信
[root@master hadoop]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.32.128 node1
192.168.32.129 master
192.168.32.130 node2
首次 格式化 hdfs 存储 ,尼玛,这里是中文横杠,最好拷贝下面命令执行。。。
hdfs namenode -format
测试是否安装成功,启动 hadoop
cd /opt/modules/hadoopstandalone/hadoop-2.8.4/sbin
./start-all.sh
# 会提示这种启动方法过时了 This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
# 这时你可以选择用新的替代方法
./stop-all.sh
# 会提示这种启动方法过时了 This script is Deprecated. Instead use stop-dfs.sh and stop-yarn.sh
# 这时你可以选择用新的替代方法
# 再次重启
./start-all.sh
# 出现下面这种结果就 ok 了 jps 查看一下 有下面的 就 ok 了
[root@master logs]# jps
67761 DataNode
67953 SecondaryNameNode
1537 AmbariServer
68515 Jps
68135 ResourceManager
68248 NodeManager
67615 NameNode
如果失败,一般都是 namenode 没有启动成功,具体原因 查看 hadoop/logs/hadoop-xxx-namenode.log 即可获得(这里告诉一个我遇到的错误,就是上面 xml 文件里的那些目录没有手动建出,然后 hdfs namenode format 中间的是 中文横杠。。震惊吧!!!)。
#好了 接下来 ,可以 学习 hdfs 了,其实 大部分跟linux 命令一致
hdfs dfs -ls /
hdfs dfs -mkdir /test
从本地拷贝到 hdfs
hdfs dfs -copyFromLocal ~/ml.txt /test/
[root@master sbin]# hdfs dfs -ls /test
Found 1 items
-rw-r--r-- 2 root supergroup 296966 2018-11-09 01:20 /test/ml.txt
hdfs dfs -cat /test/ml.txt
hdfs dfs -chmod 777 /test/ml.txt
安装配置 sqoop
wget xxx
tar -zxvf xxx.gz -C /opt/sqoop-xxx
#这时候如果你进入 sqoop 的 bin 目录下执行 ./sqoop 会告诉你
#Please set $HADOOP_COMMON_HOME to the root of your Hadoop installation.
# 或者 Please set $HADOOP_MAPRED_HOME to the root of your Hadoop MapReduce installation.
#那么不要激动,照着做就好了,编辑 sqoop 的配置文件 sqoop-env.sh ,这玩意儿本来 是 sqoop-env-template.sh,我自己改的名字
vim /opt/sqoop-1.4.7.bin__hadoop-2.6.0/conf/sqoop-env.sh
#配置下 hadoop 安装的路径到 sqoop 里就好
#修改下面的
export HADOOP_COMMON_HOME=/opt/modules/hadoopstandalone/hadoop-2.8.4
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/opt/modules/hadoopstandalone/hadoop-2.8.4
hdfs shell 命令 与 普通shell 常用 操作大同小异
python 操作 hdfs hdfs3 模块
# -*- coding: utf-8 -*-
__author__ = 'Frank Li'
from __future__ import unicode_literals
from hdfs3 import HDFileSystem
test_host = '192.168.32.129'
test_port = '9000'
def hdfs_exists(hdfs_client,path):
if hdfs_client.exists(path):
hdfs_client.rm(path)
hdfs_client.mkdir(path)
def hdfs_write_read(hdfs_client,fname):
data = b'hello hadoop'
with hdfs_client.open(fname,'wb',replication=1) as f:
f.write(data)
with hdfs_client.open(fname,'rb') as f:
out = f.read(len(data))
assert out == data
def hdfs_read_write(hdfs_client,file):
with hdfs_client.open(file,'rb') as f:
for line in f:
print(line)
if __name__ == '__main__':
hdfs_client = HDFileSystem()
path = '/test/subtest/'
hdfs_exists(hdfs_client,path)
file = '/test/ml.txt'
hdfs_write_read(hdfs_client,file)
hdfs_read_write(hdfs_client,file)
hdfs_client.disconnect()
yarn map --> reduce
手写一个 python 简单版的 map reduce 并放置于 hadoop 框架中运行
map 小脚本 hdfs_map.py
__author__ = 'Frank Li'
import sys
def read_input(stream):
for line in stream:
yield line.rstrip().split(',')
def main():
data = read_input(sys.stdin)
for word in data:
for w in word:
print('{}\t{}'.format(w,1))
if __name__ == '__main__':
main()
reduce 小脚本 hdfs_reduce.py
import sys
from operator import itemgetter
from itertools import groupby
def read_mapper_out(file,separator='\t'):
for line in file:
yield line.rstrip().split(separator,1)
def main():
data = read_mapper_out(sys.stdin)
for current_word, group in groupby(data,itemgetter(0)):
total_count = sum(int(count) for current_word, count in group)
print('{}\t{}'.format(current_word,total_count))
if __name__ == '__main__':
main()
在linux 中 试验
放到 hdfs 上试验
/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 下载安装
wget https://mirrors.cnnic.cn/apache/zookeeper/stable/zookeeper-3.4.12.tar.gz
tar -xzvf zookeeper-3.4.12.tar.gz -C /opt/modules/
当年全是虚,从今当务实...
绕不开的hadoop的更多相关文章
- Unity应用架构设计(10)————绕不开的协程和多线程(Part 1)
在进入本章主题之前,我们必须要了解客户端应用程序都是单线程模型,即只有一个主线程(Main Thread),或者叫做UI线程,即所有的UI控件的创建和操作都是在主线程上完成的.而服务器端应用程序,也就 ...
- 一步一步从原理跟我学邮件收取及发送 2.邮箱的登录和绕不开的base64
一步一步从原理跟我学邮件收取及发送 2.邮箱的登录和绕不开的base64 好了,经过本系列上一篇文章 "1.网络命令的发送",假设大家已经掌握了 email 电子邮件的命令发送的方 ...
- Unity应用架构设计(10)——绕不开的协程和多线程(Part 1)
在进入本章主题之前,我们必须要了解客户端应用程序都是单线程模型,即只有一个主线程(Main Thread),或者叫做UI线程,即所有的UI控件的创建和操作都是在主线程上完成的.而服务器端应用程序,也就 ...
- 了解SSL证书从HTTPS开始 开发者绕不开的“劫”
微信小程序上线已经有很长一段时间了,而开发者在接入小程序的过程中,会遇到一些问题,例如小程序要求必须通过HTTPS完成服务端通信,开发者需搭建HTTPS服务,进行 SSL 证书申请.部署,完成HTTP ...
- 谈到云原生, 绕不开"容器化"
传送门 什么是云原生? 云原生设计理念 .NET微服务 Containers 现在谈到云原生, 绕不开"容器". 在<Cloud Native Patterns>一书中 ...
- c 输出9x9乘法口诀表 这个学for循环绕不开的一题
#include<stdio.h> int main(void) { int i,j; ;i<=;i++) { ;j<=i;j++) { printf("%d*%d= ...
- Unity应用架构设计(10)——绕不开的协程和多线程(Part 2)
在上一回合谈到,客户端应用程序的所有操作都在主线程上进行,所以一些比较耗时的操作可以在异步线程上去进行,充分利用CPU的性能来达到程序的最佳性能.对于Unity而言,又提供了另外一种『异步』的概念,就 ...
- 绕不开的this
犹豫两秒要不要整理this,从红皮书上看了半天,没搞懂哎(弱爆了) 什么是this?this是在执行上下文创建时期创建的一个执行过程中不可改变的变量.执行上下文是指js引擎会将代码执行前需要的变量th ...
- Hadoop阅读笔记(七)——代理模式
关于Hadoop已经小记了六篇,<Hadoop实战>也已经翻完7章.仔细想想,这么好的一个框架,不能只是流于应用层面,跑跑数据排序.单表链接等,想得其精髓,还需深入内部. 按照<Ha ...
随机推荐
- HNOI2017 抛硬币 (FakeBeng)
除了队长快跑外最难的题吧. 除了需要写\(exLucas\)之外,还教会了我大量的卡常技巧. 首先\(70\)分就是个直接按题意模拟,易得\(ans=\sum_{j=0}^{b} C_{b}^{j}\ ...
- 【UOJ#246】套路(动态规划)
[UOJ#246]套路(动态规划) 题面 UOJ 题解 假如答案的选择的区间长度很小,我们可以做一个暴力\(dp\)计算\(s(l,r)\),即\(s(l,r)=min(s(l+1,r),s(l,r- ...
- canvas路径剪切和判断是否在路径内
1.剪切路径 clip() var ctx=mycanvas.getContext('2d'); ctx.beginPath(); // 建一个矩形路径 ctx.moveTo(20,10) ctx.l ...
- luogu3278/bzoj3323 多项式的运算 (splay)
mulx的操作,其实就是给r+1的系数+=r的系数,然后删掉r,把l~r-1向右移一位,再插一个0到原来的位置 splay维护区间加和区间乘就好了 (一定要注意做事的顺序,一件事都做完了再去做别的,否 ...
- Spring Boot 1.X和2.X优雅重启实战
纯洁的微笑 今天 项目在重新发布的过程中,如果有的请求时间比较长,还没执行完成,此时重启的话就会导致请求中断,影响业务功能,优雅重启可以保证在停止的时候,不接收外部的新的请求,等待未完成的请求执行完成 ...
- python random使用方法
如果你对在Python生成随机数与random模块中最常用的几个函数的关系与不懂之处,下面的文章就是对Python生成随机数与random模块中最常用的几个函数的关系,希望你会有所收获,以下就是这篇文 ...
- 第一篇-Django建立数据库各表之间的联系(上)
多表操作(一对多) 遇到的问题: 执行python manage.py makemigrations后报如下错误 TypeError: __init__() missing 1 required po ...
- request 对于cookie,session, json的处理
一.cookie是存放在客户端,session是存放在服务端. 因为http是无状态的,当客户端发送请求给服务端的时候,服务端为了区分下一次发送请求的是不是同一个客户,那么就需要用一种方式记录下这个客 ...
- Gym - 101755G Underpalindromity (树状数组)
Let us call underpalindromity of array b of length k the minimal number of times one need to increme ...
- jquery的checked以及disabled
下面只提到checked,其实disabled在jquery里的用法和checked是一模一样的 下边两种写法没有任何区别 只是少了些代码而已... ------------------------- ...