hostname | ip地址 | 备注 |
---|---|---|
ss-ubuntu | 192.168.1.101 | namenode |
yhc-VirtualBox | 192.168.1.102 | datanode |
node1 | 192.168.1.103 | datanode,secondary namenode |
node2 | 192.168.1.104 | datanode |
node3 | 192.168.1.105 | datanode |
将这些信息放入 /etc/hosts中,将master节点的ssh公钥id_rsa.pub通过scp发给各个slave,将这个id_rsa.pub写入slave中的~/.ssh/authorized_keys中,这个公钥也得写入master自己的authorized_keys中,因为hadoop使用ssh连接所有节点,这样就实现了免密登录
hdfs-site.xml
<configuration>
<property>
<name>dfs.replicationname>
<value>3value>
property>
<property>
<name>dfs.namenode.secondary.http-addressname>
<value>node1:50090value> 这个是第二个命名节点的http端口设置,node1会用过hosts文件来解析为IP地址
property>
<property>
<name>dfs.namenode.name.dirname> namenode的文件结构和命名储存位置
<value>file:/usr/local/hadoop/tmp/dfs/namevalue>
property>
<property>
<name>dfs.datanode.data.dirname> datanode的数据文件储存位置
<value>file:/usr/local/hadoop/tmp/dfs/datavalue>
property>
configuration>
core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dirname>
<value>file:/usr/local/hadoop/tmpvalue>
<description>Abase for other temporary directories.description>
property>
<property>
<name>fs.defaultFSname>
<value>hdfs://ss-ubuntu:9000value> 表示hdfs的访问地址端口
property>
configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.namename>
<value>yarnvalue>
property>
<property>
<name>mapreduce.jobhistory.addressname>
<value>ss-ubuntu:10020value> 一个任务历史的记录器
property>
<property>
<name>mapreduce.jobhistory.webapp.addressname>
<value>ss-ubuntu:19888value>记录器的web端口
property>
configuration>
yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-servicesname>
<value>mapreduce_shufflevalue>
property>
<property>
<name>yarn.resourcemanager.hostnamename>
<value>ss-ubuntuvalue>
property>
configuration>
配置好后,进入/hadoop/sbin里启动
./start-dfs.sh
./start-yarn.sh
./mr-jobhistory-daemon.sh start historyserver
如果遇到错误,去/hadoop/logs找到对应日志文件,根据日志文件来google
sudo lsof -i:端口号 可以看到指定端口号的使用情况
kill -9 pid 对占用这个端口号的进程发送SIGKILL即exit信号,不会被阻塞,能够顺利杀掉进程
使用命令hdfs dhs -ls时出现,因为ls默认去访问
/user/此时用户名
所以新建这些目录
hdfs dfs -mkdir /user
hdfs dfs -mkdir /user/ss
这是因为它默认使用你此时的用户名来ssh其他节点主机,比如你现在的用户名是ss,某一节点主机名是node1,则start-dfs.sh会执行ssh ss@node1,如果node1上面没有ss这个用户,或者没有将用户ss免密码登录就会出现这种情况
因为没有设置JAVA_HOME这个环境变量,读取环境变量的操作主要是在hadoop-env.sh中执行。加入环境变量
export JAVA_HOME=/usr/lib/jvm/default-java
上面的那个路径是我电脑中的路径,因为我是用下面的方式安装的
sudo apt-get install -y default-jdk
问题是我在Spark的conf/slaves文件中将master的hostname也写进去了,这样又做master和worker就会冲突
这是因为在Spark的conf/spark-env.sh中没有配置hadoop classpath在其中添加下面这一句
export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)
/usr/local/hadoop是我的hadoop安装目录
这是因为我在pycharm张总直接运行是不对的,要将这个py文件,使用spark目录下/bin/spark-submit –master spark://192.168.1.101:7077 test.py来提交给集群运行,在test.py后面可以添加程序的参数
在python目录中使用命令
sudo python setup.py install
如果用pip装会很慢
使用./mr-jobhistory-daemon.sh start historyserver来打开,却不能通过http://ss-ubuntu:10020来打开,后面通过日志mapred-ss-historyserver-ss-ubuntu.log发现原来是因为端口占用,因为配置文件中需要给jobhistory配置端口,也要给jobhistory.webapp配置端口,网上的教程是两个端口一样,这样会引起冲突,所以将jobhistory.webapp改为其他端口就行了