厦门大学林子雨老师课程 —— 大数据技术原理与应用 学习笔记
参考资料:http://dblab.xmu.edu.cn/post/bigdata-online-course/#lesson0
1. Hadoop的核心是分布式文件系统HDFS(Hadoop Distributed File System)和MapReduce
2. Hadoop在企业中的应用架构
3. Hive会把提交的sql转换为一系列MapReduce作业后再去执行。
4. Hadoop项目结构
5. 在Mac上安装伪分布式Hadoop
此处参考博客:
https://blog.csdn.net/fox64194167/article/details/80617527
https://blog.csdn.net/qfikh/article/details/75041190
(1)升级Java:Mac自带jdk是1.7,Hadoop 3.0需要1.8以上版本。用brew cask install java很慢,建议从官网上下载jdk-8u172,再手动安装。网址为http://www.oracle.com/technetwork/java/javase/downloads/index.html。
(2)安装Hadoop:
$ brew install Hadoop
(3)SSH登录权限设置
配置SSH的原因:
Hadoop名称节点(NameNode)需要启动集群中所有机器的Hadoop守护进程,这个过程需要通过SSH登录来实现。Hadoop并没有提供SSH输入密码登录的形式,因此,为了能够顺利登录每台机器,需要将所有机器配置为名称节点可以无密码登录它们。
用dsa密钥认证来生成一对公钥和私钥:
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
将生成的公钥加入到用于认证的公钥文件中:
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
接下来测试一下是否配置成功:
$ ssh localhost
如果遇到connection refused之类的错误,检查一下mac是否开启远程登录功能,在系统偏好设置中可以设置。
(4)配置Hadoop文件
需要配置的文件主要都在这个目录下:/usr/local/Cellar/hadoop/3.1.0/libexec/etc/hadoop
a) hadoop-env.sh
输入以下代码看看你把 Java 装到哪里了:
$ /usr/libexec/java_home
你会看到类似这样的结果:
/Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home
打开 hadoop-env.sh 文件(位置 etc/hadoop/),找到 # export JAVA_HOME=,改参数如下:
export JAVA_HOME={your java home directory}
把 {your java home directory} 改成你上面查到的 Java 路径,记得去掉注释 #。比如
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home
b) core-site.xml
打开 core-site.xml 文件(位置 etc/hadoop/),改参数如下:
hadoop.tmp.dir
file:/usr/local/Cellar/hadoop/3.1.0/tmp
Abase for other temporary directories.
fs.defaultFS
hdfs://localhost:9000
hadoop.tmp.dir表示存放临时数据的目录,即包括NameNode的数据,也包括DataNode的数据。该路径任意指定,只要实际存在该文件夹即可。
name为fs.defaultFS的值,表示hdfs路径的逻辑名称。fs.default.name 保存了NameNode的位置,HDFS和MapReduce组件都需要用到它,这就是它出现在core-site.xml 文件中而不是 hdfs-site.xml文件中的原因
c) hdfs-site.xml
打开 hdfs-site.xml 文件(位置 etc/hadoop/),改参数如下:
dfs.replication
1
dfs.namenode.name.dir
file:/usr/local/Cellar/hadoop/3.1.0/tmp/dfs/name
dfs.datanode.data.dir
file:/usr/local/Cellar/hadoop/3.1.0/tmp/dfs/data
变量dfs.replication指定了每个HDFS数据库的复制次数。 通常为3, 由于我们只有一台主机和一个伪分布式模式的DataNode,将此值修改为1。
dfs.namenode.name.dir表示本地磁盘目录,是存储fsimage文件的地方
dfs.datanode.data.dir表示本地磁盘目录,HDFS数据存放block的地方
d) mapred-site.xml
打开 mapred-site.xml 文件(位置 etc/hadoop/),改参数如下:
mapreduce.framework.name
yarn
e) yarn-site.xml
打开 yarn-site.xml 文件(位置 etc/hadoop/),改参数如下:
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.nodemanager.env-whitelist
JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME
(5)运行
a) 进入Hadoop的目录,以mac系统为例目录为
/usr/local/Cellar/hadoop/3.1.0/libexec
b) 格式化文件系统:
$ bin/hdfs namenode -format
c) 启动NameNode和DataNode的守护进程:
$ sbin/start-dfs.sh
d) 启动ResourceManager和NodeManager的守护进程:
$ sbin/start-yarn.sh
e) 在浏览器中访问以下链接,测试是否正常:
NameNode - http://localhost:9870
ResourceManager - http://localhost:8088
6. Hadoop集群的节点
HDFS:
NameNode:负责协调集群中的数据存储,类似于目录,访问数据时先去访问namenode,获得需要访问的数据具体存储在哪几个datanode中,然后再去相应的datanode中取数据。
DataNode:存储被拆分的数据块
SecondaryNameNode:帮助NameNode收集文件系统运行的状态信息
MapReduce:
JobTracker:协调数据计算任务,相当于作业管家,会把一个大的作业拆分成很多个小作业,分发到不同的机器上去执行。
TaskTracker:负责执行由JobTracker指派的任务