python学习笔记—输入

python基础25ma.cn 发表了文章 • 0 个评论 • 509 次浏览 • 2017-05-26 09:19 • 来自相关话题

前print了那么多,都是程序在向屏幕“输出”。那有来得有往,有借得有还,有吃。。。咳咳!那啥,我们得有向程序“输入”信息的办法,才能和程序对话,进行所谓的“人机交互”。

python有一个接收命令行下输入的方法:
i 查看全部
前print了那么多,都是程序在向屏幕“输出”。那有来得有往,有借得有还,有吃。。。咳咳!那啥,我们得有向程序“输入”信息的办法,才能和程序对话,进行所谓的“人机交互”。

python有一个接收命令行下输入的方法:
input()
注意,和print不同的是,这次我们必须得加上()了,而且得是英文字符的括号。
好了,终于可以搬出那个弱智小游戏了,耶!游戏里我们需要跟程序一问一答,所以我们先把话给说上。


打开我们的python编辑器,不管是IDLE,在线编辑器,还是其他的IDE。在代码编辑器中输入下面几句代码:


print "Who do you think I am?"
input()
print "Oh, yes!"


然后,Run!(Forrest Run!)你会在命令行中看到,程序输出了第一句之后就停住了,这是input在等待你的输入。


输入你的回答,回车。你会看到程序的回答。注意!引号!!又是引号!!!和print一样,如果你输的是一串文字,要用引号''或者""引起来,如果是数字则不用。


(插一句,python还有一个输入的方法:raw_input(),它把所有的输入都直接当作一串字符,于是就可以不用加引号,有兴趣的同学可以试一试,体会一下两者的不同。关于这个令人纠结的引号,我们以后会再讨论它。)

QQ截图20170526091816.png



看上去不错哦,似乎就这么对上话了。是不是觉得离小游戏的完成迈进了一大步?可是大家发现没有,即使你说"Idiot!",程序仍然会淡定地回答"Oh, yes!"因为它左耳进右耳出,根本就没听进去我们到底说了啥。那怎么才能让它认真听话呢?啪!且听下回分解。
?
?
?
?
?
?
?
?
?
回顾一下我们之前几节课。我们到现在一共提到了三种可以运行print的方式:

1. 命令行,包括Win下的控制台(CMD)和Mac下的终端(Terminal)。
它可以帮我们确认自己电脑上的python是不是正常。但是这种方法很难帮我们实现写一个完整小程序的目标。

2. IDE,包括python自带的IDLE和其他第三方的IDE。
不知道大家是不是都顺利搞定,并且能顺利保存并打开py文件了呢?以后我们课程里的内容,你都可以在这里面进行。

3. 在线编辑器,compileonline或者pythonfiddle。
他们同样包括代码编辑器(写代码的地方)和控制台(输出结果的地方)两部分。所以我们在本地IDE里的操作都可以在其中实现。只不过保存文件会有些复杂,compileonline是点击download files打包下载,pythonfiddle需要注册一下。当然,你也可以直接把你写好的代码复制下来,保存在本地,下次再粘贴上去接着写。

使用mapreduce计算白名单内单词的wordcount以及文件分发-file使用

MapReduceeverything 发表了文章 • 0 个评论 • 734 次浏览 • 2017-05-25 14:38 • 来自相关话题

-------------------------------------------
前提:?
hadoop集群搭建好
hadoop版本: 1.2.x
python版本: 2.6.x或2.7.x
-------------------------------------------
?
1.文件分发与打包?
?
如果程序运行所需要的可执行文件、脚本或者配置文件在Hadoop集群的 查看全部
-------------------------------------------
前提:?
hadoop集群搭建好
hadoop版本: 1.2.x
python版本: 2.6.x或2.7.x
-------------------------------------------

?
1.文件分发与打包?
?
如果程序运行所需要的可执行文件、脚本或者配置文件在Hadoop集群的计 算节点上不存在,则首先需要将这些文件分发到集群上才能成功进行计算。?Hadoop提供了自动分发文件和压缩包的机制,只需要在启动Streaming作 业时配置相应的参数。
?
2.文件分发与打包(-file)?
?
如果要分发的文件在本地且没有目录结构,可以使用-file /path/to/FILENAME选项分发文件,将本地文件/path/to/FILENAME分发 到每个计算节点。

? 在Streaming程序中通过./FILENAME就可以访问该文件
? 对于本地可执行的文件,除了指定的mapper或reducer程序外,可能分发后没有可执行权限,所以需要在包装程序如mapper.sh中运行chmod +x ./FILENAME设置可执行权限,然后设置-mapper “mapper.sh”。
#代码和测试数据放在附件



3.代码实例


目录mr_file_broadcast


├── map.py  # map程序 实现指定白名单内单词的分割、记录
├── reduce.py # reduce程序 实现白名单内单词数的统计
├── run.sh # 调用hadoop的运算
├── The_Man_of_Property.txt # 测试数据源
└── white_list # 测试白名单单词数据




map.py


#!/usr/bin/python
# -*- coding:utf-8 -*-
import sys
def read_loacl_file_func(f):
word_set = set()
file_in = open(f, 'r')
for line in file_in:
word = line.strip()
word_set.add(word)
return word_set
def mapper_func(white_list_fd):
word_set = read_loacl_file_func(white_list_fd)
for line in sys.stdin:
ss = line.strip().split(' ')
for s in ss:
word = s.strip()
if word != "" and (word in word_set):
print "%s\t%s" % (s, 1)
if __name__ == '__main__':
module = sys.modules[__name__]
func = getattr(module, sys.argv[1])
args = None
if len(sys.argv) > 1:
args = sys.argv[2:]
func(*args)


本地测试:


[root@master mr_file_broadcast]# cat The_Man_of_Property.txt | python map.py mapper_func white_list 


使用uniq统计单词的出现次数:


cat The_Man_of_Property.txt | python map.py mapper_func white_list | sort | uniq -c


reduce.py


#!/usr/bin/python
#-*- coding:utf-8 -*-
import sys
def reduce_func():
current_word = None
count_pool =
sum = 0
for line in sys.stdin:
word, val = line.strip().split('\t')
if current_word == None:
current_word = word
if current_word != word:
for count in count_pool:
sum += count
print "%s\t%s" % (current_word, sum)
current_word = word
count_pool =
sum = 0
count_pool.append(int(val))
for count in count_pool:
sum += count
print "%s\t%s" % (current_word, str(sum))
if __name__ == '__main__':
module = sys.modules[__name__]
func = getattr(module, sys.argv[1])
args = None
if len(sys.argv) > 1:
args = sys.argv[2:]
func(*args)


本地测试:


cat The_Man_of_Property.txt | python map.py mapper_func white_list | python reduce.py reduce_func | sort


run.sh


#!/bin/bash
HADOOP_CMD="/usr/local/hadoop-1.2.1/bin/hadoop"
STREAM_JAR_PATH="/usr/local/hadoop-1.2.1/contrib/streaming/hadoop-streaming-1.2.1.jar"
INPUT_FILE_PATH_1="/The_Man_of_Property.txt"
OUTPUT_PATH="/output_file_broadcast"
$HADOOP_CMD fs -rmr -skipTrash $OUTPUT_PATH
$HADOOP_CMD jar $STREAM_JAR_PATH \
-input $INPUT_FILE_PATH_1 \
-output $OUTPUT_PATH \
-mapper "python map.py mapper_func white_list" \
-reducer "python reduce.py reduce_func" \
-jobconf "mapred.reduce.tasks=2" \ # reduce task的数量由mapred.reduce.tasks这个参数设定,默认值是1。
-file ./map.py \
-file ./reduce.py \
-file ./white_list

4.查看结果
[root@master mr_file_broadcast]# hadoop fs -text /output_file_broadcast/part-00000 /output_file_broadcast/part-00001
give 47
the 5144
man 143
[root@master mr_file_broadcast]# hadoop fs -text /output_file_broadcast/{part-00000,part-00001}
give 47
the 5144
man 143
[root@master mr_file_broadcast]# hadoop fs -text /output_file_broadcast/{part-00000,part-00001} | sort -rn -k2
the 5144
man 143
give 47

#END

python学习笔记—IDE

python基础25ma.cn 发表了文章 • 0 个评论 • 526 次浏览 • 2017-05-25 09:33 • 来自相关话题

打个不恰当的比方,如果说写代码是制作一件工艺品,那IDE就是机床。再打个不恰当的比方,PS就是图片的IDE,Word就是doc文档的IDE,PowerPoint就是ppt文件的IDE。python也有自己的IDE,而且还有很多。


python自带了一款IDE,叫做IDLE。 查看全部

打个不恰当的比方,如果说写代码是制作一件工艺品,那IDE就是机床。再打个不恰当的比方,PS就是图片的IDE,Word就是doc文档的IDE,PowerPoint就是ppt文件的IDE。python也有自己的IDE,而且还有很多。


python自带了一款IDE,叫做IDLE。先说Windows,Windows上安装了之后,可以在“开始菜单”->“程序”->“Python 2.7”里找到它。打开后之后很像我们之前用过的命令行。没错,它就是的,在里面print一下试试。不知之前用命令行的同学有没有注意到,命令行输一行命令就会返回结果,而且之前print了那么多,关掉之后也不知道到哪里去了。所以它没法满足我们编写弱智小游戏的大计划。我们需要用新的方法!


点击窗口上方菜单栏的“File”->“New Window”,会打一个长得很像的新窗口,但里面什么也没有。这是一个文本编辑器,在这里面就可以写我们的python程序了。继续print几行,这次可以多print一点:


print 'Hello'
print 'IDE'
print 'Here I am.'


现在是,见证奇迹的时刻!点击“Run”->“Run Module”,或者直接按快捷键F5。会提示你保存刚才文件,随便取个名字,比如“lesson3.py”。(.py是python代码文件的类型,虽然不指定.py也是可以的,但建议还按规范来)保存完毕后,之前那个控制台窗口里就会一次性输出你要的结果。


以后想再次编辑或运行刚才的代码,只要在IDLE里选择“File”->“Open...”,打开刚才保存的.py文件就可以了。
?
Mac上的IDLE是预装好了,在“终端”里输入“IDLE”就可以启动,使用方法同Windows。也可以在文件夹/usr/bin里可以找到IDLE。如果是重新下载安装了python,似乎是可以在“应用程序”里找到IDLE的,Mac的同学可以验证下。


另外,Windows下有一个第三方的免费IDE,叫PyScripter,把文件目录、文本编辑器、命令行都整合到了一起,还增加了很多辅助功能。有兴趣的同学也可以去找来试试看。地址:
http://code.google.com/p/pyscripter/
用起来应该比IDLE方便,但有一点要注意,它的安装位置和.py文件的保存位置都不要有中文,不然可能会有问题。


今天的内容有点长。配置开发环境这种事最麻烦了,大家耐心一点,毕竟一次投入,长期受益。以后我们的课程都会在IDE中进行,基本不再往命令行里直接敲代码了。


最后说下,有很多python程序员都不使用任何IDE。至于原因嘛,可能就像优秀的手工艺人是不会用机床来加工艺术品的吧。

python学习笔记—print

python基础25ma.cn 发表了文章 • 0 个评论 • 508 次浏览 • 2017-05-25 09:14 • 来自相关话题

print,中文意思是打印,在python里它不是往纸上打印,而是打印在命令行,或者叫终端、控制台里面。print是python里很基本很常见的一个操作,它的操作对象是一个字符串(什么是字符串,此处按住不表,且待日后慢慢道来)。 查看全部
print,中文意思是打印,在python里它不是往纸上打印,而是打印在命令行,或者叫终端、控制台里面。print是python里很基本很常见的一个操作,它的操作对象是一个字符串(什么是字符串,此处按住不表,且待日后慢慢道来)。基本格式是: print 你要打印的东西或者 print(你要打印的东西)这里一定要英文字符的括号,所有程序中出现的符号都必须是英文字符,注意别被你的输入法坑了。

各位同学可以在自己的python环境中试着输出以下内容(这里是命令行下的效果,使用在线编辑器或者IDE的同学,只需要输入“>>>”后面的内容就可以了):

>>> print "hello"
hello
>>> print 'world'
world
>>> print 1
1
>>> print 3.14
3.14
>>> print 3e30
3e+30
>>> print 1 + 2 * 3
7
>>> print 2 > 5
False

直接在print后面加一段文字来输出的话,需要给文字加上双引号或者单引号。大家发现,print除了打印文字之外,还能输出各种数字、运算结果、比较结果等。你们试着自己print一些别的东西,看看哪些能成功,哪些会失败,有兴趣的话再猜一猜失败的原因。

其实在python命令行下,print是可以省略的,默认就会输出每一次命令的结果。就像这样:
>>> 'Your YiDa!'
'Your YiDa!'
>>> 2+13+250
265
>>> 5<50
True

今天内容就这么多。没听出个所以然?没关系,只要成功print出来结果就可以,我们以后还有很多时间来讨论其中的细节。
?
?
这个短期目标就是一个很简单很弱智的小游戏:


COM: Guess what I think?
5
COM: Your answer is too small.
12
COM: Your answer is too large.
9
COM: Your answer is too small.
10
COM: BINGO!!!


解释一下:首先电脑会在心中掐指一算,默念一个数字,然后叫你猜。你猜了个答案,电脑会厚道地告诉你大了还是小了,直到最终被你果断猜中。


这是我十几年前刚接触编程时候写的第一个程序,当时家里没有电脑,在纸上琢磨了很久之后,熬到第二个星期的电脑课才在学校的486上run起来。后来我还写过一个windows下的窗口版本。现在就让它也成为你们第一个完整的程序吧。照我们每天5分钟的进度,初步估计半个月后大约能完成了。

在windows上如何打开mapreduce的追踪网址?

回复

MapReduceeverything 发起了问题 • 2 人关注 • 0 个回复 • 1087 次浏览 • 2017-05-24 11:53 • 来自相关话题

小白如何使用hadoop1.2实现MapReduce第一个功能wordcount

MapReduceeverything 发表了文章 • 0 个评论 • 669 次浏览 • 2017-05-24 11:31 • 来自相关话题

-------------------------------------------
前提:?
hadoop集群搭建好
hadoop版本: 1.2.x
python版本: 2.6.x或2.7.x
-------------------------------------------
# 在master的根目录建立 learn_hadoop/python_wordcount 并进入目录[code][ro 查看全部
-------------------------------------------
前提:?
hadoop集群搭建好
hadoop版本: 1.2.x
python版本: 2.6.x或2.7.x
-------------------------------------------
# 在master的根目录建立 learn_hadoop/python_wordcount 并进入目录
[root@master learn_hadoop]# mkdir -p ~/learn_hadoop/python_wordcount
[root@master learn_hadoop]# cd ~/learn_hadoop/python_wordcount/


# 准备数据源
cat /etc/passwd | tr ':' ' ' | tr '/' ' ' > test.txt

# shell实现简单的wordcount
cat test.txt | tr ' ' '\n' | sort | uniq -c | sort -rn -k1 | head -10
# 编写map.py?用于数据的分割
#!/usr/local/bin/python
import sys
# 从标准输入流获取数据源 并遍历
for line in sys.stdin:
# strip() 表示删除空白符 相当于 java的String.trim()
# 每一行以空格为分割点 得到数组
ss = line.strip().split(' ')
# 遍历数组
for s in ss:
# 继续strip() 并判断字符串是否为""
if s.strip() != "":
# 输出 单词 和 1(表示次数)
print "%s\t%s" % (s, 1)

# 编写reduce.py?用于数据的合并
#!/usr/local/bin/python
import sys
# 定义一个变量用于存放当前记录的key
current_word = None
# 定义一个数组用于存放获取到key的值统计数组
count_pool =
# 定义一个变量用于存放单词出现的总次数
sum = 0
for line in sys.stdin:
# 每一行记录都切割成键值对
# 例如: the 1 变为 {"the", 1}
word, val = line.strip().split('\t')
# 当前key 为 none
if current_word == None:
# 赋值
current_word = word
# 当前key != 此次获取到key
if current_word != word:
# 遍历统计数组 得到单词出现的总次数 并且打印出来
for count in count_pool:
# 累计单词出现的总次数
sum += count
# 打印出来 当前单词 以及 总次数
print "%s\t%s" % (current_word, sum)
# 将此次得到的单词 赋值给 当前key这个变量
current_word = word
# 初始化统计数组
count_pool =
# 初始化总次数
sum = 0
# 将此次键值对的值追加到数组中
count_pool.append(int(val))
# 最后一行记录 会循环统计并打印出
# 当前单词 以及 出现次数
for count in count_pool:
sum += count
print "%s\t%s" % (current_word, str(sum))

?
# 本地测试的命令 得到输出数据 按倒序 单词 以及 出现次数?
cat test.txt | python map.py | sort -k1 | python reduce.py | sort -k2 -rn

# 编写run.sh 将脚本提交到hadoop运行
# 根据自己的实际hadoop安装目录定义变量
HADOOP_CMD="/usr/local/hadoop-1.2.1/bin/hadoop"
STREAM_JAR_PATH="/usr/local/hadoop-1.2.1/contrib/streaming/hadoop-streaming-1.2.1.jar"
INPUT_FILE_PATH_1="/test.txt"
OUTPUT_PATH="/output"
# hdfs上如果已存在/output目录则需要下面的命令
$HADOOP_CMD fs -rmr -skipTrash $OUTPUT_PATH
# 执行命令
$HADOOP_CMD jar $STREAM_JAR_PATH \
-input $INPUT_FILE_PATH_1 \
-output $OUTPUT_PATH \
-mapper "python map.py" \
-reducer "python reduce.py" \
-file ./map.py \
-file ./reduce.py

# 给run.sh赋予执行权限
chmod -R 775 run.sh
# 执行
./run.sh

?
# 查看hdfs上的输出文件?
[root@master python_wordcount]# hadoop fs -lsr /output
Warning: $HADOOP_HOME is deprecated.
-rw-r--r-- 3 root supergroup 0 2017-04-14 01:28 /output/_SUCCESS
drwxr-xr-x - root supergroup 0 2017-04-14 01:28 /output/_logs
drwxr-xr-x - root supergroup 0 2017-04-14 01:28 /output/_logs/history
-rw-r--r-- 3 root supergroup 16597 2017-04-14 01:28 /output/_logs/history/job_201704110143_0003_1492104524860_root_streamjob2185335538628447165.jar
-rw-r--r-- 3 root supergroup 52682 2017-04-14 01:28 /output/_logs/history/job_201704110143_0003_conf.xml
-rw-r--r-- 3 root supergroup 734 2017-04-14 01:28 /output/part-00000

# 发现hdfs上/output/part-00000?该文件为输出数据结果
# 查看hdfs上的输出数据 按倒序 单词 以及 出现次数
hadoop fs -text /output/part-00000 | sort -k2 -rn
# 输出结果与本地测试结果一致,大功告成
#END
?

小白如何使用Vim常用命令(转载+自己整理)

Vimeverything 发表了文章 • 1 个评论 • 700 次浏览 • 2017-05-24 11:18 • 来自相关话题

来源:?http://coolshell.cn/articles/5426.html
#所有的命令都需要在Normal模式下使用,如果你不知道现在在什么样的模式,你就狂按几次ESC键.
[code]i → Insert 模式,按 ESC 回到 Normal 模式.
x → 删当前光标所在的一个字符。
:wq 查看全部
来源:?http://coolshell.cn/articles/5426.html
#所有的命令都需要在Normal模式下使用,如果你不知道现在在什么样的模式,你就狂按几次ESC键.
i → Insert 模式,按 ESC 回到 Normal 模式.
x → 删当前光标所在的一个字符。
:wq → 存盘 + 退出 (:w 存盘, :q 退出) (陈皓注::w 后可以跟文件名)
dd → 删除当前行,并把删除的行存到剪贴板里
p → 粘贴剪贴板
a → 在光标后插入
o → 在当前行后插入一个新行
O → 在当前行前插入一个新行
cw → 替换从光标所在位置后到一个单词结尾的字符
#各种插入模式
a → 在光标后插入
o → 在当前行后插入一个新行
O → 在当前行前插入一个新行
cw → 替换从光标所在位置后到一个单词结尾的字符
#简单的移动光标
0 → 数字零,到行头
^ → 到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等)
$ → 到本行行尾
g_ → 到本行最后一个不是blank字符的位置。
/pattern → 搜索 pattern 的字符串(陈皓注:如果搜索出多个匹配,可按n键到下一个)
#拷贝/粘贴?(p/P都可以,p是表示在当前位置之后,P表示在当前位置之前)
P → 粘贴
yy → 拷贝当前行当行于 ddP
#打开/保存/退出/改变文件(Buffer)
:e <path/to/file> → 打开一个文件
:w → 存盘
:saveas <path/to/file> → 另存为 <path/to/file>
:x, ZZ 或 :wq → 保存并退出 (:x 表示仅在需要时保存,ZZ不需要输入冒号并回车)
:q! → 退出不保存 :qa! 强行退出所有的正在编辑的文件,就算别的文件有更改。
:bn 和 :bp → 你可以同时打开很多文件,使用这两个命令来切换下一个或上一个文件。(陈皓注:我喜欢使用:n到下一个文件)
#文本块复制?
v+移动光标 可以选中文本
y 可以复制已经选中的文本
p 可以粘贴
#文本块剪切
用v选中文本之后可以按d表示剪切,之后按p进行粘贴。
#感觉暂时够用了,好好练习吧
#END

python学习笔记—python环境安装

python基础25ma.cn 发表了文章 • 0 个评论 • 565 次浏览 • 2017-05-24 09:19 • 来自相关话题

进入Python的官方下载页面
http://www.python.org/download/

你会看到一堆下载链接。我们就选“Python 2.7.5 Windows Installer”,如果是64位系统的同学选下面那个“Python 2.7.5 Windows X86-64 Installer”。为什么不选最上面那个3.3.2的新版本?因为我 查看全部
进入Python的官方下载页面
http://www.python.org/download/

你会看到一堆下载链接。我们就选“Python 2.7.5 Windows Installer”,如果是64位系统的同学选下面那个“Python 2.7.5 Windows X86-64 Installer”。为什么不选最上面那个3.3.2的新版本?因为我在用python2.7.x,python3改了不少地方,不熟。


下载之后,就和装其他软件一样,双击,一路Next,想换安装路径的同学可以换个位置。但不管换不换,请把这个路径复制下来,比如我的是“C:\python27\”,后面要用到它。


安装结束还没完,我们还差最后一步:设置环境变量。这是什么东西我暂时先不解释,大家照着做就好。右键单击我的电脑(不,是你的电脑),依次点击"属性"->"高级"->"环境变量",在“系统变量”表单中点击叫做Path的变量,然后编辑这个变量,把“;C:\Python27\”,也就是你刚才复制的安装路径,加到它的结尾。注意!要用英文分号和前面已有的内容隔开。然后点确定,点确定,再点确定。完成。


怎么知道你已经成功安装了Python呢?这时候你需要打开命令行,或者叫命令提示符、控制台。方法是:点击开始菜单->程序->附件->命令提示符;或者直接在桌面按快捷键“Win+r”,Win键就是Ctrl和Alt旁边那个有windows图标的键,输入cmd,回车。这时候你就看到可爱的黑底白字了。


在命令行里输入python,回车。如果看到诸如:
Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32
的提示文字,恭喜你!否则,请重新检查你哪里的打开方式不对,或者直接给我留言。


接下来,你就可以输入那句程序员最爱的
print “Hello World”
向Python的世界里发出第一声啼哭。
?
嗯。。。如果这么几步你还是被绕晕了,没关系,我还留了一手:打开你的浏览器,Google一下“python online”,点击第一条结果“Execute Python Script Online”;或者直接打开compileonline.com,找到Python点进去。
http://www.compileonline.com/e ... e.php
这是一个在线的python运行环境,你可以在这里练习,无需任何下载安装配置。左边页面是写代码的地方,点击左上角的“Execute Sctipt”,就可以在右边页面看到输出结果。


那Mac的同学怎么办?Mac上叫“终端”,英文版叫Terminal,可以在“应用程序”里找到,也可以直接在你的Mac上搜索“终端”或者“Terminal”找到。打开之后输入“python”,回车,就可以进入python了。


好了,今天就这么多,快去试试你的python,输出一行“Hello World”吧。完成的同学可以截个屏发给我。欢迎各种建议、讨论和闲聊,当然更欢迎你把这里分享给更多的朋友。
?
我今天发现昨天提供的compileonline.com网站有时候会很慢,甚至无法正常运行,于是我又找了一个:
http://www.pythonfiddle.com
似乎要快一点,不过好像只能在电脑上的浏览器打开。另外就是,昨天忘了给Mac的同学们说一下怎么打开命令行。Mac上叫做“终端”或者“Terminal”,可以在“应用程序”里找到,也可以直接在“spotlight”里直接输入“Terminal”打开。打开后就可以通过“python”命令进入开发环境了。

小白如何安装JDK以及Hadoop集群环境搭建_2台机都要配置一致

hadoop安装everything 发表了文章 • 0 个评论 • 709 次浏览 • 2017-05-23 22:14 • 来自相关话题

前提:
安装软件准备
jdk-6u45-linux-x64.bin
hadoop-1.2.1-bin.tar.gz
上传到/usr/local目录下
1.linux的jdk1.6安装和环境变量配置
[code]#安装jdk1.6

cd /usr/local/
./jdk-6u45-linux-x64.bin

#配置环境变量并激活

[root@master local]# vim /etc/prof 查看全部
前提:
安装软件准备
jdk-6u45-linux-x64.bin
hadoop-1.2.1-bin.tar.gz
上传到/usr/local目录下

1.linux的jdk1.6安装和环境变量配置
[b]#安装jdk1.6[/b]

cd /usr/local/
./jdk-6u45-linux-x64.bin

[b]#配置环境变量并激活[/b]

[root@master local]# vim /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/local/jdk6
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
[root@master local]# source /etc/profile
2.解压hadoop1.2_创建tmp目录
tar -zxvf hadoop-1.2.1-bin.tar.gz
[root@master local]# cd hadoop-1.2.1/
[root@master hadoop-1.2.1]# mkdir tmp

3.hadoop的配置文件修改(6个文件)
[root@master conf]# cd /usr/local/hadoop-1.2.1/conf/

#修改masters
[root@master conf]# vim masters
master
#修改slave1
[root@master conf]# vim slaves
slave1

?#修改?core-site.xml,其中fs.default.name的值根据自己master的ip进行更改
[root@master conf]# cat core-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop-1.2.1/tmp</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.1.60:9000</value>
</property>
</configuration>
#修改mapred-site.xml,其中
mapred.job.tracker
的值根据自己master的ip进行更改
[root@master conf]# cat mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>http://192.168.1.60:9001</value>
</property>
</configuration>
#修改hdfs-site.xml
[root@master conf]# cat hdfs-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>

#修改hadoop-env.sh,文件最下方添加JAVA_HOME的值
export JAVA_HOME=/usr/local/jdk6

#在master通过SCP传文件给slave1
scp -rp /usr/local/hadoop-1.2.1 slave1:/usr/local/

4.启动hadoop
?
(1)第一次启动需要格式化namenode
[root@master bin]# ./hadoop namenode -format
17/04/11 01:41:04 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = master/192.168.1.34
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 1.2.1
STARTUP_MSG: build = https://svn.apache.org/repos/a ... h-1.2 -r 1503152; compiled by 'mattf' on Mon Jul 22 15:23:09 PDT 2013
STARTUP_MSG: java = 1.6.0_45
************************************************************/
17/04/11 01:41:04 INFO util.GSet: Computing capacity for map BlocksMap
17/04/11 01:41:04 INFO util.GSet: VM type = 64-bit
17/04/11 01:41:04 INFO util.GSet: 2.0% max memory = 1013645312
17/04/11 01:41:04 INFO util.GSet: capacity = 2^21 = 2097152 entries
17/04/11 01:41:04 INFO util.GSet: recommended=2097152, actual=2097152
17/04/11 01:41:04 INFO namenode.FSNamesystem: fsOwner=root
17/04/11 01:41:04 INFO namenode.FSNamesystem: supergroup=supergroup
17/04/11 01:41:04 INFO namenode.FSNamesystem: isPermissionEnabled=true
17/04/11 01:41:04 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=100
17/04/11 01:41:04 INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s)
17/04/11 01:41:04 INFO namenode.FSEditLog: dfs.namenode.edits.toleration.length = 0
17/04/11 01:41:04 INFO namenode.NameNode: Caching file names occuring more than 10 times
17/04/11 01:41:04 INFO common.Storage: Image file /usr/local/hadoop-1.2.1/tmp/dfs/name/current/fsimage of size 110 bytes saved in 0 seconds.
17/04/11 01:41:04 INFO namenode.FSEditLog: closing edit log: position=4, editlog=/usr/local/hadoop-1.2.1/tmp/dfs/name/current/edits
17/04/11 01:41:04 INFO namenode.FSEditLog: close success: truncate to 4, editlog=/usr/local/hadoop-1.2.1/tmp/dfs/name/current/edits
17/04/11 01:41:04 INFO common.Storage: Storage directory /usr/local/hadoop-1.2.1/tmp/dfs/name has been successfully formatted.
17/04/11 01:41:04 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at master/192.168.1.34
************************************************************/
(2)启动hadoop
[root@master bin]# ./start-all.sh 
starting namenode, logging to /usr/local/hadoop-1.2.1/libexec/../logs/hadoop-root-namenode-master.out
slave1: starting datanode, logging to /usr/local/hadoop-1.2.1/libexec/../logs/hadoop-root-datanode-slave1.out
The authenticity of host 'master (192.168.1.34)' can't be established.
RSA key fingerprint is e3:c2:f6:71:e2:e7:97:00:f1:b7:c2:86:42:7f:5d:2c.
Are you sure you want to continue connecting (yes/no)? yes
master: Warning: Permanently added 'master,192.168.1.34' (RSA) to the list of known hosts.
master: starting secondarynamenode, logging to /usr/local/hadoop-1.2.1/libexec/../logs/hadoop-root-secondarynamenode-master.out
starting jobtracker, logging to /usr/local/hadoop-1.2.1/libexec/../logs/hadoop-root-jobtracker-master.out
slave1: starting tasktracker, logging to /usr/local/hadoop-1.2.1/libexec/../logs/hadoop-root-tasktracker-slave1.out

5.检查hadoop集群环境是否成功启动
?
(1)master使用jps查看
[root@master bin]# jps
2461 JobTracker
2227 NameNode
2383 SecondaryNameNode
2603 Jps

(2)slave1使用jps查看
[root@slave1 local]# jps
2068 Jps
1982 TaskTracker
1908 DataNode
(3)master使用hdfs命令
[root@master bin]# ./hadoop fs -ls /
Found 1 items
drwxr-xr-x - root supergroup 0 2017-04-11 01:43 /usr

[root@master bin]# ./hadoop fs -put /etc/passwd /
[root@master bin]# ./hadoop fs -ls /
Found 2 items
-rw-r--r-- 3 root supergroup 1380 2017-04-11 01:48 /passwd
drwxr-xr-x - root supergroup 0 2017-04-11 01:43 /usr

#END

小白如何搭建2台Linux桥接模式_配置免密码ssh登录

Linuxeverything 发表了文章 • 0 个评论 • 692 次浏览 • 2017-05-23 21:58 • 来自相关话题

1.虚拟机安装linux CentOS6.5以上

~~~~~~~~~~~~~~~~~~~~~~~~~~略

2.在虚拟机配置桥接网络模式

~~~~~~~~~~~~~~~~~~~~~~~~~~略
参考:?
小白如何在virtualbox安装CentOS6并配置桥接网络以及静态ip
?
3.配置2台机子的静态ip地 查看全部
1.虚拟机安装linux CentOS6.5以上

~~~~~~~~~~~~~~~~~~~~~~~~~~略

2.在虚拟机配置桥接网络模式

~~~~~~~~~~~~~~~~~~~~~~~~~~略
参考:?
小白如何在virtualbox安装CentOS6并配置桥接网络以及静态ip
?
3.配置2台机子的静态ip地址_网关_DNS
?
[b]# Master
[/b]
[root@master ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=08:00:27:88:21:CA
TYPE=Ethernet
UUID=fd5e0998-1170-4959-92c6-9bb186a4515d
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.1.60
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=223.5.5.5
DNS2=223.6.6.6

[b]#Slave1
[/b]
[root@slave1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
UUID=799c10b3-1014-4ad4-87b0-b05227e29de0
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
HWADDR=08:00:27:0C:F0:E8
IPADDR=192.168.1.61
GATEWAY=192.168.1.1
NETMASK=255.255.255.0
DEFROUTE=yes
DNS1=233.5.5.5
DNS2=233.6.6.6

4.关闭2台机子的iptables以及禁用selinux
?
[root@master ~]# /etc/init.d/iptables stop
iptables:将链设置为政策 ACCEPT:filter [确定]
iptables:清除防火墙规则: [确定]
iptables:正在卸载模块: [确定]
# 修改SELINUX=enforcing为SELINUX=disabled

[root@master xuan]# cat /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted

5.修改2台机子的hostname

? ? 一台为master,一台为slave1
[b]# master[/b]
[root@master ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.60 master
192.168.1.61 slave1

[b]# slave1[/b]
[root@slave1 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.60 master
192.168.1.61 slave1

6.测试2台机子是否能互相ping通
?
# master
[root@master ~]# ping slave1
PING slave1 (192.168.1.61) 56(84) bytes of data.
64 bytes from slave1 (192.168.1.61): icmp_seq=1 ttl=64 time=0.735 ms
64 bytes from slave1 (192.168.1.61): icmp_seq=2 ttl=64 time=0.263 ms

# slave1
[root@slave1 ~]# ping master
PING master (192.168.1.60) 56(84) bytes of data.
64 bytes from master (192.168.1.60): icmp_seq=1 ttl=64 time=0.384 ms

7.配置2台机子之间免密码ssh登陆
?
[b]#Master 生成ssh公钥和私钥[/b]

# 使用ssh-keygen 生成公钥和私钥 一路回车 不用设置密码
[root@master ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
4c:e7:fe:6d:a0:73:0a:2b:6d:7e:e2:91:90:bf:16:90 root@master
The key's randomart image is:
+--[ RSA 2048]----+
| |
| |
| .. . |
| E+ o |
| o.S . |
| o.o . |
| .=... . |
| . ==+.... |
| *=o.+... |
+-----------------+
[root@master ~]# cd ./.ssh/
id_rsa id_rsa.pub known_hosts
[root@master ~]# cd ./.ssh/
[root@master .ssh]# ll
总用量 12
-rw------- 1 root root 1675 4月 18 16:24 id_rsa
-rw-r--r-- 1 root root 393 4月 18 16:24 id_rsa.pub
-rw-r--r-- 1 root root 394 4月 17 14:16 known_hosts
# 将id_rsa.pub内容复制到authorized_keys文件
[root@master .ssh]# cat id_rsa.pub > authorized_keys
[root@master .ssh]# ll
总用量 16
-rw-r--r-- 1 root root 393 4月 18 16:30 authorized_keys
-rw------- 1 root root 1675 4月 18 16:24 id_rsa
-rw-r--r-- 1 root root 393 4月 18 16:24 id_rsa.pub
-rw-r--r-- 1 root root 394 4月 17 14:16 known_hosts

[b]#Slave1 生成ssh公钥和私钥[/b]

[root@slave1 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
91:88:71:4d:f2:6a:58:a4:e9:50:0c:29:d2:6e:15:d1 root@slave1
The key's randomart image is:
+--[ RSA 2048]----+
| ..+=++o. |
|o o.oBE+.. |
|.o..+ o + |
| oo o . . |
| . o o S |
| . |
| |
| |
| |
+-----------------+
[root@slave1 ~]# cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA66kI4WvbHsapzwPAYhf+2RGcE53m4PSfY2Qi/0us7ksv7oICBVusKoCh/LTF1ZdZ9JM6+0G/Fh8u/MVQJb4YTR1dWj+A27zjzEkvE+Wfgdah4/yu/aMq2tHt/2mfIF+t88d9kQUgTJZMVbXhSDhipd6BSXUV9p2EUSksEAVWxhWobT/fLbud3dosr2sQGfITc92HWttLruw2xD//1aCK52HtrWEQ+hnMijgodKrGnBgOFYZLgbcSUh9S5CYHY+N816coYvucY/6TrHz3Ymc3qQcdB7vSlcko1mtbhVT5zQ3CmLR9Q6JilfTL0XshBUqcZ2Ew7XmcVNqNQti3BI48nw== root@slave1

[b]#  将slave1的公钥内容 拷贝到master的~/.ssh/authorized_keys 文件中[/b]

[root@master .ssh]# cat ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA03V3FV9O3AtpCFXDSMZh9cQZ3vn2e7UYD6lQc9uY1E9crc6iS076t5pTggKsOwQu0KsFF5x/7oSSYLZ8gUPbpZrsIVBMlLyw3rBmEBjYAmp6aampJw0TUa3GvTqFRqyMNQvpSyaK2B7WdIIDui8bILuxWDfw41/t3o+pD6s+QPMgc1UbmGzKdI8YEKM9lK6+qH39FV/SaIm4/zmhbPd73WMm+EKZ353goRxGKanK59M2FWOQnaxVUwZrhDQ0U5017t9LGQeVQcBpFFfAyE90JaXrYUNY7Hfpod/i/+mXtwwfK6hP3+p9GCv5R2iS/XDLYe5fUjGkplf71zA+XP7ZAQ== root@master
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA66kI4WvbHsapzwPAYhf+2RGcE53m4PSfY2Qi/0us7ksv7oICBVusKoCh/LTF1ZdZ9JM6+0G/Fh8u/MVQJb4YTR1dWj+A27zjzEkvE+Wfgdah4/yu/aMq2tHt/2mfIF+t88d9kQUgTJZMVbXhSDhipd6BSXUV9p2EUSksEAVWxhWobT/fLbud3dosr2sQGfITc92HWttLruw2xD//1aCK52HtrWEQ+hnMijgodKrGnBgOFYZLgbcSUh9S5CYHY+N816coYvucY/6TrHz3Ymc3qQcdB7vSlcko1mtbhVT5zQ3CmLR9Q6JilfTL0XshBUqcZ2Ew7XmcVNqNQti3BI48nw== root@slave1

[b]# master的~/.ssh/authorized_keys文件 通过scp传给slave1的~/.ssh/目录[/b]

[root@master .ssh]# scp -rp ~/.ssh/authorized_keys slave1:~/.ssh/
The authenticity of host 'slave1 (192.168.1.61)' can't be established.
RSA key fingerprint is b4:27:81:34:c0:c2:3d:98:61:be:62:69:68:85:8c:33.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'slave1' (RSA) to the list of known hosts.
root@slave1's password:
authorized_keys 100% 786 0.8KB/s 00:00

[b]#测试master免密码ssh连接slave1[/b]

[root@master .ssh]# ssh slave1
Last login: Mon Apr 17 14:09:45 2017 from 192.168.1.135
[root@slave1 ~]# ll

[b]#测试slave1免密码ssh连接master[/b]

# 第一次ssh连接需要输入yes
[root@slave1 ~]# ssh master
The authenticity of host 'master (192.168.1.60)' can't be established.
RSA key fingerprint is a4:f6:72:da:57:63:39:8b:80:59:d6:b9:ce:cb:58:a5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'master,192.168.1.60' (RSA) to the list of known hosts.
Last login: Mon Apr 17 14:05:39 2017 from 192.168.1.135
[root@master ~]# exit
logout
Connection to master closed.
# 第二次直接免密码连接
[root@slave1 ~]# ssh master
Last login: Tue Apr 18 16:40:42 2017 from slave1
[root@master ~]#
#END
?