-
文档地址: 百度网盘
提取码:169f
WPS 2019文档,内附详细安装过程Linux安装路径及备份恢复都可在这里恢复
如何将原来的系统导入到virtualbox中
准备linux 准备一张centos的盘 Redhat:https://www.redhat.com/en
Ubuntu:https://www.ubuntu.com/download/desktop
Centos:https://www.centos.org/安装包:CentOS-6.10-x86_64-minimal.iso 将光盘插入到光驱中;
安装linux
用户名:root 密码:123456
关机: Halt -n Init 0
备份–快照
硬盘空间够用的话,有事木事就备份一下;
上网 上网方式:
https://jingyan.baidu.com/article/9f7e7ec04f73c66f28155484.html 现状
真实机(宿主机)可以上外网 虚拟机可以上外网;(但是真实机与虚拟机网络不通) 虚拟机即能上外网又能真实机互通; 修改网卡,防火墙
网卡Mac地址;网卡的身份证;12位16进制组成;
操作命令如下:
进入到配置网卡的目录 cd /etc/sysconfig/network-scripts/
查看指定文件的内容;
eth0:第一块网卡,直接复制一下就可以 less ifcfg-eth0
列出当前目录下面有哪些文件夹和文件夹;dos:dir Ls
#将网卡1,复制一份变成网卡2 cp ifcfg-eth0 ifcfg-eth1
编辑网卡2; vi ifcfg-eth1
查看模式(默认的),编辑模式,命令模式;
如果想修改,按下i;就可以编辑;(编辑模式)
退出:保存(按下esc键松了,g4再按下:x),或者(按下esc键,再按下:wq!):不保存:(按下esc键,:q!)
将网络服务重启; service network restart
查看ip ifconfig
Ifcfg-eth1的内容; DEVICE=eth1 TYPE=Ethernet
UUID=e8d5353d-aa82-4804-8d1e-0683b3ece70b把no变成yes,就可以随机启动 ONBOOT=yes NM_CONTROLLED=yes
动态获取ip BOOTPROTO=dhcp HWADDR=08:00:27:2F:C1:40 DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no
NAME=“System eth0” 静态IP DEVICE=eth1 TYPE=Ethernet
UUID=e8d5353d-aa82-4804-8d1e-0683b3ece70b把no变成yes,就可以随机启动 ONBOOT=yes NM_CONTROLLED=yes
静态ip BOOTPROTO=static HWADDR=08:00:27:2F:C1:40 DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no
NAME=“System eth0”
配置一下IP;先换成动态的,再换成静态的; IPADDR=192.168.56.101
防火墙 临时修改
永久修改
check config Chkconfig
查询所有的随机启动程序 Chkcnofig
根目录
一个软件有三部分组成: Windows Java linux
可执行文件:bin Exe,msi,bat,cmd 和操作系统相关 *.sh 配置文件:conf xml Properties Xml
json Conf(etc目录) 库(工具) dll jar包 *.so
Windows和java一样,都是把一个软件的三部分放到了一个目录中 Bin:可执行文件;建议把所有软件的可执行文件都放到此目录中
Boot:引导文件;启动的时候可以找到linux系统 Dev:设备;dvd,usb; Etc:配置文件
Home:每一个用户在创建的时候会有一个home目录;(建议用户把自已的文件放到home目录下面) Lib:库
lib64:64位操作系统的库 lost+found: Media:多媒体;片;光盘里面的内容
Mnt:挂载;插u盘,手动挂载一下;(快捷方式) Opt:用户安装的系统都搁到此目录下面;c:/program file;
Proc:进程的相关信息 Root:root用户的home目录 Sbin:多个bin文件组合到一起;批量可执行文件
Selinux:linux自带的安全管理组件(一般禁用) Srv: sys
Tmp:临时文件;(重启Linux,如果硬盘空间不够,会优先删除此目录下面所有的文件;不安全) Usr:和opt类似
Var:变量,哪些文件经常发生变化,放到此目录;如日志(log4j2)硬盘分区
统一将软件安装到/data目录;
修改的是/etc/fstab文件
重启 备份
yum yum源 自动下载rpm包(最新的) 自动验证rpm是否完整 自动安装, 自动测试 自动运行 安装yum-程序
命令上传lrzsz yum -y install lrzsz
上传-y:如果文件已经存存,-y表示覆盖 rz -y
sz文件名 Sz -y
编辑器 vi–编辑器 查看模式 Ctrl+f:翻下页 Ctrl+b:翻上页 输入数字,然后输入大写的G;
直接输入大写的G是最后一行; 按下两下d;删除当前行 Shift+0以段落为单位进行切换; Home键,end键
按下回车键,一次一行 编辑模式 按下i进入到编辑模式 按下esc:从编辑模式进入到查看模式;
:wq!(保存退出),:x(保存退出),:q!(不保存退出) 命令模式;在查看模式下面直接输入:就会进入到命令模式; :set
nu打回车,就看到了行号 搜索:查找;/关键字;按下n,找下一个,按下大写的n(shift+n)(找上一个)vim–编辑器 Vi和vim完全一样,只不过vim有色儿;(颜色)
安装–wget 下载工具;wget;windows版本的迅雷
检查wget如何使用 wget --help
-y:相当一路下一步 yum -y install wget
wget url;在浏览器中弹出一个下载框 wget https://dldir1.qq.com/qqfile/qq/QQ9.0.8/24207/QQ9.0.8.24207.exe
断点续传 wget https://dldir1.qq.com/qqfile/qq/QQ9.0.8/24207/QQ9.0.8.24207.exe -c
备份 每当有需要改变或者增加新的程序,或者配置文件时多备份 以上单独一台虚拟机的基础标配 hadoop–集群标配
多台虚拟机–标配 创建虚拟机赶紧要看一下,新复制出来的新电脑是不是可以上网; 要保证新复制出来的电脑,MAC地址不一样(网卡的身份证);先关机
重新配置一下网络(参照初始安装linux如何配置网络)
重启两次 Xshell必备
标准配置 保证网络畅通 虚拟机之间相互通畅
真实机与虚拟机之间畅通
修改主机名
修改hosts文件(离线版dns); linux的hosts文件
Windows的hosts文件
免密钥
上锁;锁和钥匙 ssh-keygen -t rsa -P ‘’ -f ~/.ssh/id_rsa
是把钥匙放到另外一个文件中(给邻居) cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
把这个文件变成600; chmod 600 ~/.ssh/authorized_keys
把A的钥匙给了B,A可以登陆B
做备份
四台虚拟机
集群搭建 JDK Hadoop集群 主机名 Node-1 Node-2 Node-3 Node-4 Namenode ✔
Datanode ✔ ✔ ✔ secondnamenode ✔ Resourcemanager ✔
nodemanager ✔ ✔ ✔ 先安装jdk; 先将jdk上传到node-1上,
将node-1上的jdk分别在node-2,node-3,node-4搁一份将jdk的rpm手动上传到node-2,node-3,node-4;
本地的网络相当的慢;
利用服务器的网络来传输内容;
scp -r(递归) 文件或者文件夹的名字 用户名@主机名(ip):目标服务器的路径 scp -r jdk-8u192-linux-x64.rpm root@node-2:/root
简写;用户名可以省略(默认是当前的用户名)
pwd:在源机器上,一定要进入到最终的目录; 在目标服务器上,最终目录一定要存在;
在源机器上目录是:root; 如果目标机器上木有root目录,建议先创建好(一定要注意) scp -r jdk-8u192-linux-x64.rpm node-3:
pwd
第三种写法 scp jdk-8u192-linux-x64.rpm node-4:$PWD
hadoop 先配置好一台服务器(node-1) 查看jdk安装路径 Witch javac / whereis
javacJdk装到哪了?
环境变量在哪配置 全局的系统变量
先将hadoop上传到node-1上;都放到了/data/hadoop/下面
配置文件:(etc/hadoop/hadoop-env.sh)export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export
HDFS_SECONDARYNAMENODE_USER=root export
YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=root配置文件(etc/hadoop/core-site.xml) <?xml version=“1.0”
encoding=“UTF-8”?> <?xml-stylesheet type=“text/xsl”
href=“configuration.xsl”?>
fs.defaultFS
hdfs://node-1:9000
hadoop.tmp.dir
/data/hadoop/data/hadoop-${user.name}
配置文件(etc/hadoop/hdfs-site.xml) <?xml version=“1.0”
encoding=“UTF-8”?> <?xml-stylesheet type=“text/xsl”
href=“configuration.xsl”?>
dfs.replication
2
<!-- 权限检查 --> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> <!-- namenode的访问地址;http协议,网页访问 --> <property> <name>dfs.namenode.http-address</name> <value>node-1:9870</value> </property> <!-- secondary的访问地址;http协议,网页访问 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>node-2:9868</value> </property> <!-- dfs.namenode.name.dir:namenode的目录放的路径在hadoop.tmp.dir之上做了修改 file://${hadoop.tmp.dir}/dfs/name dfs.datanode.data.dir:namenode的目录放的路径在hadoop.tmp.dir之上做了修改 file://${hadoop.tmp.dir}/dfs/data --> </configuration>
配置文件(etc/hadoop/mapred-site.xml) <?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
mapreduce.framework.name yarn
mapreduce.map.memory.mb 200
mapreduce.map.java.opts
-Xmx200M
mapreduce.reduce.memory.mb 200
mapreduce.reduce.java.opts
-Xmx200M配置文件(etc/hadoop/yarn-site.xml) <?xml version="1.0"?>
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
<!-- resourcemanager的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>node-1</value> </property> </configuration>
配置文件(etc/hadoop/workers);(放的是datanode,每一个datanode默认都有一个nodemanager)
node-2 node-3 node-4将配置好的hadoop分发到node-2,node-3,node-4上面;用scp
一定是在hadoop软件(框架)所在的目录下面 /data/hadoop
在node-1执行此命令,将hadoop拷贝到node-2 scp -r hadoop/ node-2:$PWD
拷贝到node-3上 scp -r hadoop/ node-3:
pwd
拷贝到node-4上 scp -r hadoop/ node-4:/data/hadoop
在namenode上执行hadoop的启动命令;(node-1)
格式化,只操作一次,要格式化的时候要慎重 bin/hdfs namenode -format
启动dfs sbin/start-dfs.sh
启动yarn sbin/start-yarn.sh
访问 Node-1:9870
日志 如果启动报错,看日志
在namenode的内容
在datanode存储的数据;(木有加密)
zookeeper高可用 内容: 分布式有缺点: 只有大哥和二哥,如果都挂了呢?
Namenod挂了,seconnamenode都不能自动接棒 Namenode和secondnamenode都挂了,没有三哥;
Zookeeper: Zookeeper:动物园管理员 作用:(多台服务器)
把多台服务器中的硬盘当成一块使用,如果没有hadoop或者hadoop自己本身运行的时候也需要存储数据
每台服务器都要装zookeeper;自己有一个选举的机制(如:选班长) 投票: 选leader;
Leader挂了;剩下的人自己选择 如果leader活了,当成小弟,跟着leader走
自己主动检测leader挂了,自动切换(通知所有人)官网(http://zookeeper.apache.org/)
实战 Zookeeper 单机版本 Windows 版本
直接解压此文件”zookeeper-3.4.13.tar.gz”,最好别放在中文目录中 去掉版本号 标准目录Bin:可执行文件 Conf:配置文件 Contrib:第三方提供的jar包 Dist-maven:使用maven打包的发布版本
Docs:文档 Lib:jar 包 Src:源码 核心的jar包:zookeeper-3.4.13.jar
Readme.md(读我) 配置文件(conf/zoo_sample.cfg复制一份为zoo.cfg)服务器启动 双击 bin/zkServer.cmd
启动成功
启动命令
客户端启动
客户端常用命令:把zookeeper理解为 linux 上的文件系统 也有文件和文件夹,(文件夹上可以存储内容)
创建一个目录/文件(在这叫路径);
create:目录/文件,数据 create /hw test
查看/表示根路径和linux很像 Ls 路径
修改 Set 路径 值
查看内容 Get 路径
删除(路径) rmr /hw
创建一个子目录; Create 路径 值
路径必须得存在; create /a/b test_2
create s:(永久性节点)e:(临时性节点); 临时文件 Create -s /s a Create -e /e b
存储位置
Linux版本
一定要将zookeeper的tar包传到服务器上,
解压tar包 tar -xzvf zookeeper-3.4.13.tar.gz
改名 mv zookeeper-3.4.13/ zookeeper
配置文件:(conf/zoo_sample.cfg到zoo.cfg);
一定要注意我的当前目录 cp zoo_sample.cfg zoo.cfg
启动 bin/zkServer.sh start
查看是否启动 Jps bin/zkServer.sh status !ps ps aux|grep
pwd
查看日志(zookeeper.out)
启动客户端 bin/zkCli.sh 退出客户端: Quit/ctrl+d
Zookeeper多级版本 Node-1 Node-2 Node-3 Node-4 zk ✔ ✔ ✔
先装好一个(不能完全装完) 修改配置文件(conf/zoo.cfg);
The number of milliseconds of each tick tickTime=2000
The number of ticks that the initial
synchronization phase can take initLimit=10
The number of ticks that can pass between
sending a request and getting an acknowledgement syncLimit=5
the directory where the snapshot is stored.
do not use /tmp for storage, /tmp here is just
example sakes. dataDir=/data/zookeeper/data/
the port at which the clients will connect clientPort=2181
the maximum number of client connections.
increase this if you need to handle more clients
#maxClientCnxns=60
Be sure to read the maintenance section of the
administrator guide before turning on autopurge.
http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
Purge task interval in hours
Set to “0” to disable auto purge feature
#autopurge.purgeInterval=1
集群的配置
server.随机起(zk自己识别的名字)=主机名:端口1:端口2 server.1=node-1:2888:3888 server.2=node-2:2888:3888 server.3=node-3:2888:3888
将zookeeper从node-1同步到node-2,和node-3;
一定要在/data/zookeeper下面;当前目录下面得有zookeeper scp -r zookeeper/ node-2:
pwd
scp -r zookeeper/ node-3:pwd
一定要在 zoo.cfg配置文件中data目录下面创建一个myid;myid文件中填写的是zookeeper自己为服务器起的别名
三台服务器一块启动 zokeeper
重启 bin/zkServer.sh restart
查看状态 bin/zkServer.sh status
客户端使用和单机版一样
在三个zookeeper任意一台操作,会自动的同步到其它服务器上; 都是框架来和zookeeper交互
高可用–hight avaible
参照网址:
http://hadoop.apache.org/docs/r3.1.1/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html 一定要让zookeeper正常工作 Node-1 Node-2 Node-3 Node-4 Namenode ✔ ✔
Datanode ✔ ✔ ✔ Resourcemanager ✔ ✔ Zookeeper ✔ ✔ ✔
Journalnode ✔ ✔ ✔ Journal node:hadoop负责与zookeeper进行沟通;
Zkfc:zookeeper failover controller;大哥挂了自动切换;配置文件 Hadoop-evn.sh
定义一些变量 export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root export
YARN_NODEMANAGER_USER=root export HDFS_JOURNALNODE_USER=root export
HDFS_ZKFC_USER=rootCore-site.xml <?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
fs.defaultFS
hdfs://jh
hadoop.tmp.dir
/data/hadoop/data/hadoop-${user.name}
<!-- 告诉hadoop,zookeeper放哪了 --> <property> <name>ha.zookeeper.quorum</name> <value>node-1:2181,node-2:2181,node-3:2181</value> </property> </configuration>
Hdfs-site.xml <?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
dfs.replication
2
<!-- 权限检查 --> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> <!-- dfs.namenode.name.dir:namenode的目录放的路径在hadoop.tmp.dir之上做了修改 file://${hadoop.tmp.dir}/dfs/name dfs.datanode.data.dir:namenode的目录放的路径在hadoop.tmp.dir之上做了修改 file://${hadoop.tmp.dir}/dfs/data --> <!-- 为nameservice起一个别名 董事会 --> <property> <name>dfs.nameservices</name> <value>jh</value> </property> <!-- 董事会的成员 --> <property> <name>dfs.ha.namenodes.jh</name> <value>nn1,nn2</value> </property> <!-- 配置每一个攻事会成员 每一个配置的时候得有rpc(底层),http(上层==网页) --> <property> <name>dfs.namenode.rpc-address.jh.nn1</name> <value>node-1:8020</value> </property> <property> <name>dfs.namenode.http-address.jh.nn1</name> <value>node-1:9870</value> </property> <!-- 第二个成员 --> <property> <name>dfs.namenode.rpc-address.jh.nn2</name> <value>node-2:8020</value> </property> <property> <name>dfs.namenode.http-address.jh.nn2</name> <value>node-2:9870</value> </property> <!-- journalnode:负责hadoop与zk进行沟通 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://node-2:8485;node-3:8485;node-4:8485/jh</value> </property> <!-- 哪个类决定了自动切换 哪个namenode是活着的(active) --> <property> <name>dfs.client.failover.proxy.provider.jh</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- journal的存储位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/data/hadoop/data/journal/</value> </property> <!-- 大哥挂了,自动切换到二哥上 启动故障转移 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- (ssh免密码登录) --> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property> </configuration>
将配置文件传递到其他的服务器上 文件所在的目录打包发送
一定要注意,此命令的基础是在hadoop的目录下面 scp -r etc/ node-2:
pwd
scp -r etc/ node-3:pwd
scp -r etc/ node-4:pwd
启动hadoop 删除/data/hadoop/data 下所有文件 Journalnode
在node-2,node-3,node-4三个服务器上启动journalnode服务器,执行以下命令
sbin/hadoop-daemon.sh start journalnode bin/hdfs --daemon start
journalnode启动namenode 格式化namenode ,在其中任何一台namenode上格式化(我是在 node-1 上做得格式化)
bin/hdfs namenode -format把刚才格式化后的元数据拷贝到另外一个namenode上(将node-拷贝到node-2)
一定要进入到/data/hadoop/data中 scp -r hadoop-root/ node-2:
pwd
启动刚刚格式化的namenode:(node-1) sbin/hadoop-daemon.sh start namenode
bin/hdfs --daemon start namenode在没有格式化的namenode上执行:(node-2) bin/hdfs namenode -bootstrapStandby
启动第二个namenode(node-2) sbin/hadoop-daemon.sh start namenode bin/hdfs
–daemon start namenode在其中一个节点上初始化zkfc(node-1)(一定要启动zookeeper) bin/hdfs zkfc -formatZK
重新启动hdfs
sbin/stop-dfs.sh sbin/start-dfs.sh
测试 停止active的namenode,自动切换 Kill -9 bin/hdfs --daemon stop namenode
高可用的yarn 参照网址:
http://hadoop.apache.org/docs/r3.1.1/hadoop-yarn/hadoop-yarn-site/ResourceManagerHA.html
配置文件 <?xml version="1.0"?>
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
<!-- yarn开启ha --> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!-- yarn董事会的名字 --> <property> <name>yarn.resourcemanager.cluster-id</name> <value>jh-yarn</value> </property> <!-- 董事会列表 --> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <!-- hostname,webapp--> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>node-1</value> </property> <property> <name>yarn.resourcemanager.webapp.address.rm1</name> <value>node-1:8088</value> </property> <!-- 第二台 --> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>node-2</value> </property> <property> <name>yarn.resourcemanager.webapp.address.rm2</name> <value>node-2:8088</value> </property> <!-- zookeeper --> <property> <name>yarn.resourcemanager.zk-address</name> <value>node-1:2181,node-2:2181,node-3:2181</value> </property> </configuration>
启动yarn sbin/start-yarn.sh
Yarn相关的命令
检查一下当前所在的节点,resource是active还是standby yarn rmadmin -getServiceState rm1
配置成功后 一旦配置成功以后,都是使用以下命令 sbin/stop-all.sh sbin/start-all.sh
Hadoop 往zookeeper都写了啥
hadoop集群-zookper高可用
版权声明:转载请标明来源 https://blog.csdn.net/jy882821/article/details/86353423
猜你喜欢
转载自blog.csdn.net/jy882821/article/details/86353423
今日推荐
周排行