Hadoop集群简介
逻辑上分离指的是两个集群之间没有依赖、互不影响,物理上在一起值得是某些角色往往部署在同一台物理服务器上。而MapReduce是计算框架、代码层面的组件,没有集群之说。
Hadoop部署模式
Standalone(单机模式)
1个机器运行1个java进程,所有角色在一个进程中运行,主要用于调试
Pseudo-Distributed mode(伪分布式)
一个机器运行多个进程,每个角色一个进程,主要用于调试
Cluster mode( 集群模式)
集群模式主要用于生产环境部署,会使用N太主机组成一个Hadoop集群。这种部署模式下,主节点和从节点会分开部署在不同的机器上
HA mode(高可用模式)
在集群模式的基础上为单点故障部署备份角色,形成主备架构,实现容错
匹配不同操作系统的本地库环境,Hadoop某些操作比如压缩、IO需要调用本地库(.so丨.dll),注:Centos本地库文件格式是so,Windows本地库dll。
Hadoop官网更新了编译后的Hadoop包,跟着晨哥找到对应的版本
第一步:找到Hadoop版本列表
推荐hadoop-3.1.4、hadoop-3.2.3、hadoop-3.3.3(需要ProtocolBuffer 3.7.1)
第二步:以3.2.3版本为例,下载编译后的包。

为什么要重新编译源码?
有兄弟就要问了,既然官方提供了编译后的源码包,为什么还要手动编译呢?
对于Hadoop乃至其他大数据软件来说,编译源码要从以下几个角度考虑
官方编译后的安装包,是一个最大公约数的安装包,能够在所有的平台上运行,但是呢对于某些平台的本地库兼容性不太友好。
理解了了为什么要编译,下面是编译的具体操作流程
源码包根目录下文件:BULIDING.txt
各个环境版本最好保持一致,大版本一致就行比如jdk只要是java8就行。为了节省读者时间,晨哥已经把hadoop3.1.4、hadoop3.2.3、hadoop3.3.3编译好了,直接点击编译成品包里,有编译好的三个版本供大家下载。感兴趣的同学可以自行下载各个版本的搭建包自行编译。Hadoop3各个版本下载链接

Build instructions for Hadoop
----------------------------------------------------------------------------------
Requirements:
* Unix System
* JDK 1.8 (必需要安装的)
* Maven 3.3 or later (必需要安装的,)
* ProtocolBuffer 2.5.0(hadoop-3.3.0以前必须且必须是这个版本,之后的版本ProtocolBuffer 用ProtocolBuffer 3.7.1)
* CMake 3.1 or newer (if compiling native code) (必需是手动安装的)
* Zlib devel (if compiling native code) (Hadoop3.1.x f不用,但是Hadoop3.2.x必装,否则报错)
* Cyrus SASL devel (if compiling native code)
* One of the compilers that support thread_local storage: GCC 4.8.1 or later, Visual Studio,
Clang (community version), Clang (version for iOS 9 and later) (if compiling native code)
* openssl devel (if compiling native hadoop-pipes and to get the best HDFS encryption performance) (需要,直接使用yum源安装即可)
* Linux FUSE (Filesystem in Userspace) version 2.6 or above (if compiling fuse_dfs) (以下都不需要管)
* Doxygen ( if compiling libhdfspp and generating the documents )
* Internet connection for first build (to fetch all Maven and Hadoop dependencies)
* python (for releasedocs)
* bats (for shell code testing)
* Node.js / bower / Ember-cli (for YARN UI v2 building)
jar包准备(hadoop源码、JDK8、maven、ant 、protobuf)
1、yum install gcc gcc-c++
2、yum install autoconf automake libtool curl
3、yum install lzo-devel zlib-devel openssl openssl-devel ncurses-devel
4、yum install snappy snappy-devel bzip2 bzip2-devel lzo lzo-devel lzop libXtst
#yum卸载已安装cmake 版本低
yum erase cmake
#解压
tar zxvf cmake-3.13.5.tar.gz
#编译安装
cd /opt/cmake-3.13.5
#编译时间很长,请耐心等待
./configure
#安装
make && make install
#验证
[root@node4 ~]# cmake -version
cmake version 3.13.5
# 卸载cmake
xargs rm < install_manifest.txt
#卸载已经安装的
cd /usr/local/lib
rm -rf libsnappy*
#上传解压
tar zxvf snappy-1.1.3.tar.gz
#编译安装
cd /opt/snappy-1.1.3
./configure
make && make install
#让动态链接库为系统所共享(添加完后需要调用下ldconfig,不然添加的library会找不到)
ldconfig
#验证是否安装
[root@node4 snappy-1.1.3]# ls -lh /usr/local/lib |grep snappy
-rw-r--r-- 1 root root 511K Nov 4 17:13 libsnappy.a
-rwxr-xr-x 1 root root 955 Nov 4 17:13 libsnappy.la
lrwxrwxrwx 1 root root 18 Nov 4 17:13 libsnappy.so -> libsnappy.so.1.3.0
lrwxrwxrwx 1 root root 18 Nov 4 17:13 libsnappy.so.1 -> libsnappy.so.1.3.0
-rwxr-xr-x 1 root root 253K Nov 4 17:13 libsnappy.so.1.3.0
#解压安装包
tar zxvf apache-maven-3.5.4-bin.tar.gz
#配置环境变量
vim /etc/profile.d/my_eny.sh
export MAVEN_HOME=//opt/apache-maven-3.6.3
export MAVEN_OPTS="-Xms4096m -Xmx4096m"
export PATH=:$MAVEN_HOME/bin:$PATH
source /etc/profile
#验证是否安装成功
[root@node4 ~]# mvn -v
Apache Maven 3.5.4
#添加maven 阿里云仓库地址 加快国内编译速度
vim /opt/apache-maven-3.6.3/conf/settings.xml
aliyunmaven
central
阿里云公共仓库
https://maven.aliyun.com/repository/public
aliyunmaven
*
阿里云谷歌仓库
https://maven.aliyun.com/repository/google
aliyunmaven
*
阿里云阿帕奇仓库
https://maven.aliyun.com/repository/apache-snapshots
aliyunmaven
*
阿里云spring仓库
https://maven.aliyun.com/repository/spring
aliyunmaven
*
阿里云spring插件仓库
https://maven.aliyun.com/repository/spring-plugin
aliyunmaven
*
阿里云grails-core
https://maven.aliyun.com/repository/grails-core
aliyunmaven
*
阿里云gradle-plugin
https://maven.aliyun.com/repository/gradle-plugin
aliyunmaven
*
阿里云mapr-public
https://maven.aliyun.com/repository/mapr-public
#解压
tar zxvf protobuf-2.5.0.tar.gz
#编译安装
cd /opt/protobuf-2.5.0
./configure
make && make install
#让动态链接库为系统所共享(添加完后需要调用下ldconfig,不然添加的library会找不到)
ldconfig
#验证是否安装成功
[root@node4 protobuf-2.5.0]# protoc --version
libprotoc 2.5.0
#卸载
#查看执行文件路径
which protoc
sudo rm /usr/local/bin/protoc //执行文件
sudo rm -rf /usr/local/include/google //头文件
sudo rm -rf /usr/local/lib/libproto* //库文件
sudo rm -rf /usr/lib/protoc
#上传解压源码包
tar zxvf hadoop-3.2.3-src.tar.gz
#编译
cd /opt/hadoop-3.2.3-src
mvn clean package -Pdist,native -DskipTests -Dtar -Dbundle.snappy -Dsnappy.lib=/usr/local/lib
#参数说明:
Pdist,native :把重新编译生成的hadoop动态库;
DskipTests :跳过测试
Dtar :最后把文件以tar打包
Dbundle.snappy :添加snappy压缩支持【默认官网下载的是不支持的】
Dsnappy.lib=/usr/local/lib :指snappy在编译机器上安装后的库路径
编译之后的安装包路径
/opt/hadoop-3.2.1-src/hadoop-dist/target
[ERROR] Failed to execute goal org.apache.hadoop:hadoop-maven-plugins:3.2.1:cmake-compile (cmake-compile) on project hadoop-hdfs-native-client: CMake failed with error code 1 -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR] mvn -rf :hadoop-hdfs-native-client
解决办法:更换Hadoop源码包版本,推荐Hadoop3.1.4、Hadoop3.2.3、Hadoop3.3.3