因为上次面试的公司主要是做大数据风控的, 当然了, 大家也都知道大数据很火, 一直觉得大数据很难, 所以也没怎么去学习, 最近看了几个朋友发的博客, 也让我大概了解了大数据, 正好也有着Java 和 linux等基础. 所以就去学习学习大数据.(毕竟技多不压身嘛).
Hadoop
解决海量数据存储和数据分析计算的Apache的开源框架.
重点组件
- HDFS 分布式文件系统
- NameNode(老大)管理
- DataNode(小弟)存储数据
- MAPREDUCE 分布式运算程序开发框架
- HIVE SQL数据仓库工具
- HBASE 基于Hadoop的分布式海量数据库
- Zookeeper 分布式协调服务基础组件–RPC
- YARN 资源调度系统
- ResourceManager(老大)
- NodeManager
- Flume 日志数据采集框架
- Sqoop 数据迁移工具
Hadoop配置
众所周知 配置是我们在入手一门新的语言最重要的一道门槛, 大部分人都会停留下配置阶段, 因为每个人遇到的配置方面的bug都各不相同, 所以一旦有些配置自己不能解决了, 或者百度, 谷歌啥的也不能解决(其实都是查询的方式不对). 所以好多人就在这个时候放弃了.
所以我的这篇一起学Hadoop博客中最主要还是要具体说下 配置问题
- 准备linux环境
- 安装JDK
- 安装Hadoop(修改etc/hadoop的5个配置文件) 启动hdfs, yarn, 创建用户文件目录, 上传文件至目录, jar等等.
- 配置ssh免密登录
这里我搭建的是伪分布式的环境, 因为正式的环境至少要三台电脑, 伪分布式就是在自己本地上安装linux虚拟机即可.
准备linux环境就不用多说了吧.
建议下载的linux的最小化版本吧. 就是不带图形化界面的. 有linux基础的操作很简单的. 就是些文件上传, 远程登录, 还是就是一些软件的解压缩, 系统环境变量配置, 添加用户等等.
我是用的virtualBox 然后下载linux的centos7的iso镜像. 自行百度, 安装过程很傻瓜式的.
安装JDK
在linux安装JDK方式很多.1
2
3
4
5
6
7
8
9
10
111. 方式一:
在本机上到oracle官网下载好jdk的压缩包,然后scp命令或者windows下有ftp的工具可以直接上传.
然后就在linux上解压缩, 命令就是 **tar -zxvf xxxxjdk1.8.0.tar.gz -C 这里放你想解压到哪个目录的路径**,
然后就是配置环境变量, 想要配置全局的(对所有用户都有效)就在 /etc/profile文件中配置, 针对具体用户请在 ~/.bash_profile中配置, 里面的语法都是Shell Script, 不懂的可以参考我之前的 一起学Shell Script.
也就是配置一下JAVA_HOME
JAVA_HOME=/usr/local/src/jdk1.8.0
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH
1 | 2. 方式二: |
安装后要注意重新加载环境变量脚本: source /etc/profile
然后执行 java -version 如果能够正确打印java的信息, 配置就成功了.
至此 jdk 就算安装完了.
安装Hadoop
1 | 同样的, 去Apache官网下载, 这里我也使用wget下载: |
然后就是伪分布式hadoop环境具体的配置了.1
2
3
4
5
6> 先说下 Hadoop的比较重要的几个目录
> sbin: 启动和停止hadoop相关服务的脚本;
> bin: 对hadoop相关服务(hdfs, yarn)进行操作的脚本
> etc: hadoop的配置文件目录,
> share: hadoop的依赖jar包, 以及还有一些hadoop的示例程序, 比如 wordcount. 后面会具体说下.
> lib: hadoop本地库,
接下来就是具体的配置了, 一共5个配置文件
在 hadoop-evn.sh
1
大约在25-27行吧, 有一个 JAVA_HOME=${JAVA_HOME}, 改成绝对路径, JAVA_HOME=/usr/local/src/jdk1.8.0即可.
core-site.xml hadoop核心配置文件:
1
2
3
4
5
6
7
8
9
10
11<!--配置hdfs的namenode, 即管理的主机地址, 可以直接填写 localhost, 端口一般配置 9000-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.1.239:9000</value>
</property>
<!--配置datanode保存数据的位置, 该目录必须事先存在. 要创建-->
<property>
<name>hadoop.tmp.dir</name>
<value>/root/training/hadoop/tmp</value>
</property>
`
注意:
结束了之后最好修改下datanode保存数据文件的权限
如果你是在Mac上部署的话, 不改这个权限会报错的(启动不了namenode和datanode)
sudo chmod -R a+w /Library/hadoop-2.7.3
hdfs-site.xml 配置hdfs, hadoop的分布式文件系统.
1
2
3
4
5
6
7
8
9
10<!--配置hdfs的冗余度-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!--配置是否进行权限检查-->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>mapred-site.xml 配置mapreduce
1
2
3
4
5<!--配置mapreduce运行的框架,为yarn容器-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>yarn-site.xml 配置yarn
1
2
3
4
5
6
7
8
9
10
11<!-- 配置resourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>192.168.1.239</value>
</property>
<!-- 配置nodemanager执行任务的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
配置文件就算配置好了. 不过启动hadoop之前要格式化下namenode格式化namenode
1
2hdfs namenode -format
日志: xxxx has been successfully formatted启动, (如果之前没配置免密码登录, 启动过程中会要求输出多次密码. 下面我会说下 免密码配置)
1
2
3
4
5
6
7
8start-all.sh
1. 启动yarn 执行计算
2. 启动hdfs 存储数据
执行jps 查看是否有: datanode, namenode, resourcemanager, nodemanager等是否启动成功.
到这里, 伪分布环境就搭建好了.
同样的停止命令: stop-all.sh访问方式:
1
2
3
4
51. 命令行
2. Java API
3. Web Console
hdfs: 192.168.1.239:50070 这里可以看到hadoop的dfs文件系统的信息.
yarn: 192.168.1.239.8088 这里可以看到hadoop的资源管理器 yarn的一些信息.mapreduce下的wordcount程序示例:
1 | 1. 首先 cd 到hadoop下 hadoop-2.7.3/share/hadoop/mapreduce 目录中. |
免密码登录
1 | 1. 生成公钥和私钥:(在哪个用户下生成就是那个用户的秘钥对. 根据用户来区分的) |
1 | 信任的配置:(使用ssh远程登录时, 可以设置成不校验key, 也可以指定私钥, 从而可以进行远程登录.) |
还有一些其余的配置
1 | 添加用户 |