本人是学生一枚,前段时间参加了省里举办的高校“大数据技术与应用”竞赛。作为一名小白,从搭建环境学起,遇到了各种问题。用到了hadoop、linux、spark、scala、hive、sqoop、hbase、mysql。现把自己整理的过程分享出来。本人分享的都是非常浅显的技术,在本机中运行几次没有问题的成果,命令都是直接可以复制使用,供大家参考。
本教程使用的文件都在我的某度网盘里 大家有需要可以自行下载 pan.baidu.com/s/1i4UdHNR 密码 whpd
来个防和谐的 屁A恩 点 baidu 点 谁喔m/s/1i4UdHNR密码 whpd
本教程对从没接触过linux和hadoop的同学有用,大神请忽视。有些出错的问题是直接网上找到的解决办法,大家自己选择判断。
开发环境:win10
VMware Workstation Pro12
ubuntu16.04 、centos 6.5、centos7 (以下$ 后面跟着的命令即为终端输入的命令 复制时去掉$)
1、本人使用vm创建的虚拟机,建议大家安装完linux系统以后,先装上vmware tool,vmware tool安装完成后要重启一下虚拟机,这样就可以把win10(原系统)里面的文件或文字直接复制粘贴到linux中了。
1.1、首先在安装的虚拟机上面点击右键
我这里已经安装完成,未安装时显示的是更新 vmware tools ,点击后会在你虚拟机桌面上显示一个cd盘,打开就是安装文件,或者在文件管理器左边同样打开即是安装文件。
在这里说明一下,linux的压缩包是***.tar.gz 结尾的,不是Windows的zip或者rar。
1.2、本人linux系统中的用户名是hadoop,linux中home文件夹下的hadoop文件夹是用户直接可以操作的,删除、修改、从Windows里面拖拽文件到hadoop文件夹。其他文件夹是在 \ 目录下的,有时用户不能直接操作,因此安装文件一般都需要把文件放到home/hadoop 中 再安装到其他文件夹。图中打开home文件夹里面就有个hadoop文件夹,这里就不截图展示了,不懂的同学自行百度下linux的文件目录结构就明白了。
1.3 、将vmware tools.tar.gz 复制到hadoop文件夹下。在桌面空白处点击右键---打开终端。输入以下命令:
-----------------------------------------------------------------------------------------
$ cd /home/hadoop
//先进入hadoop目录
$ sudo tar -zxvf VMwareTools-9.9.3-2759765.tar.gz -C /usr/local
//将vmtools解压到 usr/local目录中大家也可以解压到opt、var等但是一般书本都解压到local咱们按惯例吧·
$ cd /usr/local
//进入local目录
$ ls
//ls是列出文件夹中的所有文件、文件夹,当然也可以用鼠标进目录管理器进行查看。
$ cd vmware-tools-distrib
// 我这里解压完成后是这个vmware-tools-distrib名字
//这里说个小技巧 假如文件夹里只有某个名字 输入如vm 然后按tab键系统会自动补全后面的名字vmware-tools-distrib
$ sudo vmware-install.pl
// vmware-tools-distrib 文件夹下有个vmware-install.pl 安装即可 安装过程中会有yes或no 一路enter yes就可以
成功后会提示enjoy vm···· 重启reboot后就可以使用vm tools
----------------------------------------------------------------------------------------------------
2、准备工作 关闭防火墙 实现ssh免密码登陆
2.1、在CentOS 6.x中,可以通过如下命令关闭防火墙:
$ sudo service iptables stop # 关闭防火墙服务
$ sudo chkconfig iptables off # 禁止防火墙开机自启,就不用手动关闭了
centos7.0
直接关闭防火墙
$ systemctl stop firewalld.service #停止firewall
$ systemctl disable firewalld.service #禁止firewall开机启动
ubuntu中默认关闭了防火墙
$ sudo ufw status #查看防火墙状态
$ sudo ufw disable #关闭防火墙
2.2、一般情况下,CentOS 默认已安装了 SSH client、SSH server,打开终端执行如下命令进行检验:
$ rpm -qa | grepssh
如果返回的结果包含了 SSH client 跟 SSH server,则不需要再安装。
若需要安装,则可以通过 yum 进行安装(安装过程中会让你输入 [y/N],输入 y 即可):
$ sudo yum install openssh-clients 在ubuntu中 使用这个命令安装 :sudo apt-get install ssh
$ sudo yum install openssh-server
接着执行如下命令测试一下 SSH是否可用:
$ ssh localhost
此时会有如下提示(SSH首次登陆提示),输入 yes 。然后按提示输入密码000000(我这里是六个0),这样就登陆到本机了。
但这样登陆是需要每次输入密码的,我们需要配置成SSH无密码登陆。
首先输入 exit 退出刚才的 ssh,就回到了我们原先的终端窗口,然后利用 ssh-keygen 生成密钥,并将密钥加入到授权中:
$ exit # 退出刚才的 ssh localhost
$ cd ~/.ssh/ # 若没有该目录,请先执行一次ssh localhost
$ ssh-keygen -trsa # 会有提示,都按回车就可以
$ cat id_rsa.pub >> authorized_keys # 加入授权
$ chmod 600 ./authorized_keys # 修改文件权限
此时再用 ssh localhost 命令,无需输入密码就可以直接登陆了。
3、安装java hadoop是在java基础上运行的
大家自行去java官网下载linux 使用的jdk 这里我直接上命令 (jdk安装包存到home/hadoop文件夹里)
$ cd /home/hadoop
$ sudo tar -zxvf jdk-7u91-linux-x64.tar.gz -C /usr/local #解压到/usr/local目录下
$ cd /usr/local
$ ls #查看解压后的名字
$ sudo mv jdk***** jdk # 将文件夹名改为jdk mv 原名 新名
#接着需要配置一下JAVA_HOME 环境变量,为方便,我们在 ~/.bashrc 中进行设置
$ vim ~/.bashrc
#vim编辑器使用方法: 按键盘字母 i 进行插入编辑 完成后按键盘Esc 会发现编辑光标没有了 这时候键盘按 shift+:键 会出现一个冒号
#输入 wq 是保存退出 /输入 q 是直接退出 /输入 !q 是强制退出
#输入 i 直接复制下面代码
export JAVA_HOME=/usr/local/jdk
export PATH=${JAVA_HOME}/bin:$PATH
export JRE_HOME=${JAVA_HOME}/jre #可以没有
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib #可以没有
#输入:wq 退出
source ~/.bashrc # 务必要保存 java环境才能配置生效
#在终端里输入
$ java -version
显示版本了 即为配置成功
4、安装hadoop 配置环境变量
4.1、Hadoop 2 可以通过 http://mirror.bit.edu.cn/apache/hadoop/common/ 或者http://mirrors.cnnic.cn/apache/hadoop/common/ 下载
大家自行去官网下载hadoop 这里我直接上命令 (hadoop安装包存到home/hadoop文件夹里)
$ cd /home/hadoop
$ sudo cp -r hadoop-2.6.5.tar.gz -C /usr/local
$ cd /usr/local
$ sudo mv hadoop-2.6.5 hadoop # 将文件夹名改为hadoop
$ sudo chown -R hadoop:hadoop hadoop # 修改文件权限
#这是上面句子的解释 递归修改文件夹my及包含的所有子文件(夹)的所属用户(jay)和用户组(fefjay):
$ chown -R jay:fefjay my #修改文件所属用户为jay,所属用户组为fefjay
#我这里是hadoop用户 hadoop用户组
$ vim ~/.bashrc
#复制粘贴
export HADOOP_HOME=/usr/local/hadoop
#改成自己安装后文件夹的名字 我之前已经改为hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$HADOOP_HOME/bin:$PATH
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
$ source ~/.bashrc #保存
#在这里 终端中输入以下命令 就能看到hadoop的版本了
$ cd/usr/local/hadoop
$ ./bin/hadoop version
4.2、#Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 #DataNode,同时,读取的是 HDFS 中的文件。Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中,伪分布式需要修改2个#配置文件 core-site.xml 和 hdfs-site.xml
$ cd /usr/local/hadoop/etc/hadoop #进入目录 修改core-site.xml 和 hdfs-site.xml
ls #看到相关文件
$ vim core-site.xml
#将当中的 <configuration></configuration> (这两个在文件的最后两行) 修改为下面配置:
----------------------------------------------------------------------------复制粘贴即可
<configuration>
<property>
<!-- 指定hadoop运行时产生文件的存储路径 -->
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>A base for othertemporary directories.</description>
</property>
<property>
<!-- namenode的通信地址 -->
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
----------------------------------------------------------------------------- : wq 退出
#同样的,修改配置文件 hdfs-site.xml:
$ vim hsfs-site.xml
-------------------------------------------------------------复制粘贴
<configuration>
<property>
<!-- 设置hdfs副本数量 -->
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<!-- namenode 存放 name table 的目录 -->
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<!-- datanode 存放数据 block 的目录 -->
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
----------------------------------------------------------------- :wq
#使用终端 输入 下面
$ cd #回到根目录
$ hdfsnamenode -format #输入这个
成功的话,会看到 "successfully formatted" 和"Exitting with status 0"的提示 若为 "Exitting with status1" 则是出错。
回去检查防火墙 、ssh 和 core-site.xml 和 hdfs-site.xml是否输入对。
#如果在这一步时提示 Error: JAVA_HOME is not set and could not be found. 的错误,则说明之前设置 JAVA_HOME 环境变量那边就没设置好,请按教程先设置好 JAVA_HOME 变量,否则后面的过程都是进行不下去的。如果已经按照前面教程在.bashrc文件中设置了JAVA_HOME,还是出现 Error: JAVA_HOME is not set and could not be found. 的错误,那么,请到hadoop的安装目录修改配置文件“/usr/local/hadoop/etc/hadoop/hadoop-env.sh”,在里面找到“export JAVA_HOME=${JAVA_HOME}”这行,然后,把它修改成JAVA安装路径的具体地址,比如,“export JAVA_HOME=/usr/local/jdk”,然后,再次启动Hadoop。
#接着开启 NameNode 和 DataNode 守护进程。 终端输入
$ ./sbin/start-dfs.sh #start-dfs.sh 是个完整的可执行文件,中间没有空格
#若出现如下SSH提示,输入yes即可。
启动时可能会出现如下 WARN 提示:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable WARN 提示可以忽略,并不会影响正常使用。
启动完成后,可以通过命令 jps 来判断是否成功启动,若成功启动则会列出如下进程: "NameNode"、"DataNode" 和 "SecondaryNameNode"(如果 SecondaryNameNode 没有启动,请运行 sbin/stop-dfs.sh 关闭进程,然后再次尝试启动尝试)。如果没有 NameNode 或 DataNode ,那就是配置不成功,请仔细检查之前步骤,或通过查看启动日志排查原因。
此外,若是 DataNode 没有启动,可尝试如下的方法(注意这会删除 HDFS 中原有的所有数据,如果原有的数据很重要请不要这样做):
# 针对 DataNode 没法启动的解决方法
$ ./sbin/stop-dfs.sh # 关闭
$ rm-r ./tmp # 删除 tmp 文件,注意这会删除 HDFS 中原有的所有数据
$ ./bin/hdfs namenode -format # 重新格式化 NameNode
$ ./sbin/start-dfs.sh # 重启
#成功启动后,可以访问 Web 界面 http://localhost:50070 查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件。
#下次启动 hadoop 时,无需进行 NameNode 的初始化,只需要运行 ./sbin/start-dfs.sh 就可以!我个人比较喜欢
直接终端输入 start-all.sh
4.3、启动Yarn 先关闭hadoop ./sbin/stop-dfs.sh 或者 stop-all.sh
(伪分布式不启动 YARN 也可以,一般不会影响程序执行)
YARN 是从 MapReduce 中分离出来的,负责资源管理与任务调度。YARN 运行于 MapReduce 之上,提供了高可用性、高扩展性,YARN 的更多介绍在此不展开,有兴趣的可查阅相关资料。上述通过./sbin/start-dfs.sh 启动 Hadoop,仅仅是启动了 MapReduce 环境,我们可以启动 YARN ,让 YARN 来负责资源管理与任务调度。
下面直接上命令
$ cd /usr/local/hadoop/etc/hadoop #进入目录
$ ls #可以看到相关文件
#首先修改配置文件mapred-site.xml,源文件是mapred-site.xml.template 这边需要先进行重命名:
$ mv mapred-site.xml.template mapred-site.xml
#然后再进行编辑
$ vim mapred-site.xml
----------------------------------- ------------复制粘贴
<configuration>
<property>
<!-- 通知框架MR使用YARN -->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
------------------------------------------- :wq 保存
#接着修改配置文件yarn-site.xml:
$ vim yarn-site.xml
----------------------------------------------复制粘贴
<configuration>
<!-- reducer取数据的方式是mapreduce_shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
------------------------------------------ :wq保存
# 然后就可以启动 YARN 了(需要先执行过 ./sbin/start-dfs.sh)或者配置好直接start-all.sh 下面start-yarn.sh 也省略了
$ ./sbin/start-yarn.sh #启动YARN
#开启后通过 jps 查看,可以看到多了 NodeManager 和 ResourceManager 两个后台进程
注意:按上面的命令直接敲是完全可以的,假如出错了我上面有一些出错的例子,其他错误百度一下也能解决。注意看终端中提示的error 那一行 。
1、假如你创建的是A用户 不想用A来配环境 直接再创建一个用户即可。下面是步骤
1.1、ubuntu中创建hadoop用户
sudo useradd –m hadoop –s /bin/bash #终端中输入这个命令
#上面这条命令创建了可以登陆的 hadoop用户,并使用 /bin/bash 作为 shell
#接着使用如下命令设置密码,可简单设置为 123456,按提示输入两次密码:
$ sudo passwd hadoop
#可为 hadoop 用户增加管理员权限 这一步强烈建议做
$ sudo adduser hadoop sudo
#注销后登陆就看到新用户hadoop了
1.2 centos中创建hadoop用户
$ sudo useradd –m hadoop –s /bin/bash #终端中输入这个命令
#上面这条命令创建了可以登陆的 hadoop用户,并使用 /bin/bash 作为 shell
#接着使用如下命令设置密码,可简单设置为 123456,按提示输入两次密码:
$ sudo passwd hadoop
#可为 hadoop 用户增加管理员权限 这一步强烈建议做
$ vim
/etc/sudoers #终端中输入这个 与ubuntu不一样
#找到文件里面有下面一行 root ALL```````
# root ALL=(ALL) ALL #在这一行下面添加
hadoop ALL=(ALL) ALL # hadoop是新增的用户
# :wq 保存退出
#注销后登陆就看到新用户hadoop了
建议登陆后使用在终端中输入 su 输入密码进入root用户进行以上所有java hadoop操作