1, 概念:
--------Hadoop是一个开源框架,它允许在整个集群使用简单编程模型计算机的分布式环境存储并处理大数据。它的目的是从单一的服务器到上千台机器的扩展,每一个台机都可以提供本地计算和存储。
1.1 理论
1)集群:
指的是多台设备构成一个完整的应用,构成该应用的设备就构成了一个集群
2)Hadoop
hadoop = hdfs + 运算框架
hadoop 有两种运算框架, : mapreduce (第一代运算框架) 和 Yarn (第二代运算框架)
3) hdfs
hdfs = hadoop dfs : d ---> 分布式 , f ----〉filesystem
4), mapreduce [ 第一代框架 ]
hadoop : 第一代框架; hadoop 的底层运算框架
5) yarn
hadoop 第二代框架,yarn 必须在第一代运算框架启动后才能使用
1.2 术语
1),m/s
m/s 值得是:master (主)和/ slave (从),
一个管理者,多个工作者,
在 Hadoop 配置和命令中。 主机是: namenode , 从机是 datanode;
2), 公钥
公钥 是一对加密代码,A节点将公钥发送个给其他设备后, 就能免密码登陆其他设备 。
3), 免密码登录;
集群节点之间通信不需要输入密码也能互相登陆发消息 , 实现方式是通过公钥实现的
2。 hadoop 集群搭建
2.1 集群配置方案
以下是集群设备配置方案:
角色 网络设备 名, 用户名, 用户组, [ 静态 ] IP 子网掩码 网关 dns
master (管理者) node1 haduser hadoop 192.168.3. 81 255.255.255.0 192.168.3.1
slave (工作者) node2 haduser hadoop 192.168.3 .82
slave (工作者) node3 haduser hadoop 192.168.3. 83
2.2 LInux 环境搭建 (root)
1)创建用户与用户组
useradd hduser
groupadd hadoop
useradd -g hadoop hduser
passwd hduser
2)修改网络用户名node1 vi /etc/sysconfig/network
修改为:
然后 : ESC ; shirt+ : + wq 回车
3) 修改 本机名(网络用户名)解析记录
打开 host 文件
$> vi /etc/hosts
增加 内容:
192.168.3. 81 node1
192.168.3. 82 node2
192.168.3. 83 node3
4 更改 用户拥有的超级角色(/etc/sudoers)
修改sudoers
4)更改用户拥有超级用户角色(/etc/sudoers)
修改/etc/sudoers文件权限为可编辑(777)
打开sudoers文件,增加如下内容:
将/etc/sudoers文件权限权限改回440,此文件只有只读才可用,否则不可用
5)配置ip 子网掩码 网关 dns
命令行修改:ls /etc/sysconfig/network-scripts/
Linux界面修改:记得选对所有用户可用
6. 防火墙服务关闭(root)
#> service iptables stop
#> chkconfig iptables off
----------------------------------------单台--------------------------------------------------------------------------------------
7。 克隆两台设备 node2 node3 (安装了jdk后再克隆,)
v2 v3
克隆后可能遇到的问题:
注: 如果主,从机的用户一致 (都为node1 )时, 则通过以下改正:
要重启:
8。 集群设备之间免密码登录
1。 在node 1 上生成公钥
$> ssh-keygen -t rsa
2。 将 Nodel 的公钥派发给 node2
$> ssh-copy-id node2
3. 将 Nodel 的公钥派发给 node3
$> ssh-copy-id node3
4. 将 Nodel 的公钥派发给 node1
$> ssh-copy-id node1
5. 将 Nodel 的公钥派发给 node1 的 localhost
$> ssh-copy-id localhost
6. 将 Nodel 的公钥派发给 node1 的 127.0.0.1
$> ssh-copy-id 127.0.0.1
【主机能给从机派发,不需要输入密码,从机给主机派发就需要输入密码, 从机之间(暂时)不能相互派发】
2.3 hadoop 集群搭建
1. jdk 安装 (usr/java)
卸载已安装jdk
解压 tar 包 到 /usr/java
tar -zxvf /home/cg/桌面/jdk-8u171-linux-x64.tar.gz -C /usr/java
配置环境变量
export JAVA_HOME=/usr/java/jdk1.8.0_171
export PATH=$JAVA_HOME/bin:$PATH
生效配置文件
source /etc/profile
$> java
java -version 测试 版本
2. 安装 hadoop
解压; 获取hadoop 的 tar 安装包: 解压到 /home/ hduser / 下;
更改文件夹名为: hadoop
$> tar -zxvf hadoop-2.6.5.tar.gz -C /home/hduser/
$> mv /home/hduser/hadoop-2.6.5 /home/hduser/hadoop
以上步骤完成后获取 hadoop 主目录, /home/hduser/hadoop
更改:hadoop 配置文件(hadoop 主目录 /etc/hadoop/ )
cd etc/hadoop
1. hadoop-env. sh (hadoop hdfs 运行时环境文件)
$> vi hadoop/etc/hadoop-env.sh
export JAVA_HOME= /usr/java/jdk1.8.0_171
2. mapred-env. sh (hadoop mapreduce 运算框架运行环境文件)
export JAVA_HOME= /usr/java/jdk1.8.0_171
3. yarn-env. sh (hadoop , hdfs 运行环境文件)
export JAVA_HOME= /usr/java/jdk1.8.0_171
4。 slaves (工作节点的信息) 打开 节点: vi /hadoop/etc/hadoop/salves
里面只有一个 : localhost: 改为:
node2
node3
5。 core-site. xml (hadoop 核心配置文件) :
$> vi /hadoop/etc/hadoop/core-site. xml
fs: dedfults: 该属性配置的dfs 的访问入口
》 hdfs : // : 这是hdfs 文件系统的访问协议
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hduser/hadoop/tmp</value>
</ property>
hadoop.tmp.dir : 本地临时文件夹
file:/ 是访问本地文件的协议格式
temp 文件夹默认是不存在的, 需要手动创建
【把上面的复制到命令打开的文件中】
6。 hdfs-site. xml (hdfs 的配置文件)
$> vi hadoop/etc/hadoop/hdfs-site. xml
<主机备份节点, 访问地址>
<property>
<name>dfs.namenode.secordary.http-address</name>
<value>node1:50090</value>
</property>
<namenode 数据存放目录>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hduser/hadoop/dfs/name</value>
</property>
《datanode 数据存放目录》
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hduser/hadoop/dfs/data</value>
</property>
《数据备份个数》
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
< dfs.webhdfs.enabled : 可以通过web 访问 完全分布是。
>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
7。 mapred-site.xml (mapreduce 配置文件)
$> vi hadoop/etc/hadoop/mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
《mapreduce.framework.name : 配置作业运算框架使用yarn 框架》
8。 yarn -site. xml (yarn 配置文件)
复制到桌面,
创建以上第5 , 6 步需要的三个文件
$> mkdir /home/hduser/hadoop/temp
mkdir /home/hduser/hadoop/dfs/name
mkdir /home/hduser/hadoop/dfs/data
如没有 dfs 文件时 需要 递归创建一个:
mkdir -p dfs/name
mkdir -p dfs/data
查看 是否复制成功: cat 文件名
$> e.g cat yarn-site.xml
将 node1 d的 hadoop 文件夹 复制到node2 与 node3 的 hduser 对应的文件夹下:
$> scp -r /home/hduser/hadoop hduser@node2:/home/hduser/
scp -r /home/hduser/hadoop hduser@node3:/home/hduser/
注释: 如果有错误, 就需要把dfs 文件下两个 name , data 里的内容清除掉。
2。3。 格式化与启动
格式化 1. 只能格式化一次,
命令: 利用hadoop 主目录下bin 目录下的hadoop 命令格式化
$ > bin/hadoop
ls
bin/hadoop namenode -format
在hadoop 的 bin 目录下时: ./hadoop namenode -format
格式化后:没有 error 就基本代表成功了
2) 启动
利用hadoop 主目录下sbin 目录
启动分布式文件系统
$> sbin/start-dfs.sh
在sbin 目录下 ./start-dfs.sh
启动运算框架
$> sbin/start-yarn.sh
在sbin 目录下 ./start-yarn.sh
3) 测试: 浏览器打开: http://node1:50070 web 访问分布式系统
4) 关闭
关闭运算框架
$> sbin/stop-yarn.sh
关闭分布式文件系统
$> sbin/stop-dfs.sh
3 hdfs 命令;
1. ) 访问hdfs 根目录(/) $> bin/hadoop dfs -ls /
/* 执行命令后可能会出现:
* 19/01/06 16:32:48 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
*/,
2) 在 HDFS 新建目录 /test $> bin/hadoop dfs -mkdir /test
3) 从 本地上传文件 a.txt 到 hdfs /test/ 下
$> bin/hadoop dfs -put ***/a.txt /test/
4) 将 hdfs /test/下 a.txt 下载到本地桌面并命名为 b.txt
$> bin/hadoop dfs -get /test/a.txt /home/hadoop/桌面/b.txt
5) 删除 hdfs 上 /test 目录
$ > bin/hadoop dfs -rmr /test
4. 安装 eclipse
ecplise 需要 Hadoop-eclipse-plugin.2.6** .jar 插件 复制到esclipse/plugins 下
先解压 :
$》 命令:
cd elipse
ls
ls -l plugins/hadoop-eclipse-plugin-2.6.4.jar
ls
./ eclipse -clean
在命令启动的eclispe 后, 配置Hadoop环境
打开eclipse 改成project 视角, preference ---mapreduce 右侧配置:
Hadoop installation direction: /home/hduser/hadoop
打开 mappreduce 选项卡
eclipse -----show view --------others-------搜索并打开 mapreduce
在新打开的 mappreduce 的选项卡中, 右键点击新增 MapReduce location, 弹出配置界面
当初的配置界面做一下配置
:
name : xxxx
dfs: node1 9000
mapreduce : node1 90001
保存
eclipse 工作空间左侧 project explore 选项卡中, 点击dfs locations 能看到刚配置的分布式文件xxxx.
点击xxxx 展开 分布式文件系统目录结构,
在环境变量加: export PATH = $JAVA _HOME/bin/java/
$> cd hasoop
pwd
$> hadoop dfs -ls /
生效:
5 , 测试;
$> hadoop version
4.1 wordcount 单词计数作业
1.?) node1 本地创建 2个记事本: 1. txt , 2. txt
1. txt :
this is a hadoop text , hadoop is a application
this is a example .
2. txt
java
mysql
hadoop
mybatis
2.) 将 node1 本地的 1.txt , 2. txt 分别上传到 hdfs /input/ 下
$ > hadoop dfs -mkdir /input
hadoop dfs -put input/1.txt /input/
ls
mv 1.txt
mv 2.txt
3.) 在 hdfs 上 新建一个文件夹 、/output/ 用于存放计算的结果集
$> hadoop dfs -mkdir /output
ls hadoop/share/
4.) 利用 hadoop 自带样例 jar 包, 执行单词计数器运算:
自带样例 : hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar
$> hadoop jar hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar wordcount /input/* /output/wc1
wordcount
被运算的资源位置,。 结果输出位置
结果:
this 2
is 3
hadoop 3
查看 wc1:
$> hadoop fs -ls /output/
hadoop fs -cat /output/wc1/*
cd examples
ls
创建 eclipse 快捷方式:
liux 桌面 ,创建启动器, eclipse,
$>
ls
cp etc/hadoop/log4j.properties /home/hduser/workspace/
cp etc/hadoop/log4j.properties /home/hduser/workspace/工程名/src
6. 安装apache-tomcat
这是 查看 jdk 及其路径--命令: