ip定位数据大约12M,采用-chacheFile 分发

文件来源https://pan.baidu.com/s/1J0pwTafHgt4T0k3vV_gC-A

格式大致格式如下:

0.0.0.0 0.255.255.255 NULL IANA保留地址 NULL
1.0.0.0 1.0.0.255 亚洲 亚太地区 NULL
1.0.1.0 1.0.1.255 亚洲 中国 福建
1.0.2.0 1.0.3.255 亚洲 中国 福建
1.0.4.0 1.0.7.255 大洋洲 澳大利亚 NULL
1.0.8.0 1.0.15.255 亚洲 中国 广东
1.0.16.0 1.0.31.255 亚洲 日本 NULL
1.0.32.0 1.0.63.255 亚洲 中国 广东
1.0.64.0 1.0.127.255 亚洲 日本 NULL
1.0.128.0 1.0.255.255 亚洲 泰国 NULL

用户数据是应该是大量的,这个用于数据输入:

文件来源:https://pan.baidu.com/s/1l6qqr9U2YObl_pyM4r3VjA

数据大致格式如下:

ECEE8FBBBB      113.224.76.226
ED38780B1D 106.36.217.145
120BB4FB44 113.109.42.83
9D4EC87B4B 219.153.212.31
AF0E43C785 111.77.229.40
4AAAEB560B 60.13.190.132
53BAABADD8 124.167.254.130
6C1FADFF90 60.27.188.251
478A215D8C 101.47.19.207
0000000000 106.114.74.120
A7FDC270DF 112.26.70.229
1714BE65F3 36.63.12.44
0EFF6D7DCC 218.75.123.226
0000000000 211.161.248.231

map.py思路,每个计算节点都将ip定位数据加载到内存中,然后输入部分用户数据,进行分析,代码如下:

#!/usr/bin/python
ip_convert = lambda x:sum([256**j*int(i) for j,i in enumerate(x.split('.')[::-1])])#将ip转换为数字
def load_ip_lib_func(ip_lib_fd):#将ip定位信息加载到内存
ip_lib_list = []
file_in = open(ip_lib_fd, 'r')
for line in file_in:
ss = line.strip().split(' ')
if len(ss) != 5:
continue
start_ip = ss[0].strip()
end_ip = ss[1].strip()
area = ss[2].strip()
country = ss[3].strip()
province = ss[4].strip()
ip_lib_list.append((ip_convert(start_ip), ip_convert(end_ip), area, country, province))
return ip_lib_list def get_addr(ip_lib_list, ip_str):#二分查找获取地址信息
ip_num = ip_convert(ip_str)
low_index = 0
mid_index = 0
high_index = len(ip_lib_list) - 1
while (low_index < high_index):
mid_index = (low_index + high_index) / 2
sss = ip_lib_list[mid_index]
start_ip = sss[0]
end_ip = sss[1]
provice = sss[4].strip()
if ip_num < start_ip:
high_index = mid_index - 1
elif ip_num > start_ip:
low_index = mid_index + 1
if ip_num < start_ip:
provice = ip_lib_list[mid_index-1][4]
else:
provice = ip_lib_list[mid_index][4]
return provice
def mapper_func(ip_lib_fd):
ip_lib_list = load_ip_lib_func(ip_lib_fd) for line in sys.stdin:
ss = line.strip().split('\t')
if len(ss) != 2:
continue cookie = ss[0].strip()
ip_str = ss[1].strip() user_addr = get_addr(ip_lib_list, ip_str)
print '\t'.join([cookie, ip_str, user_addr]) 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)

run.sh如下:

HADOOP_CMD="/usr/local/src/hadoop-1.2.1/bin/hadoop"
STREAM_JAR_PATH="/usr/local/src/hadoop-1.2.1/contrib/streaming/hadoop-streaming-1.2.1.jar" INPUT_FILE_PATH_1="/mapreduce/ip/cookie_ip.txt"
OUTPUT_PATH="/mapreduce/ip/out" $HADOOP_CMD fs -rmr -skipTrash $OUTPUT_PATH # Step 1.
$HADOOP_CMD jar $STREAM_JAR_PATH \
-input $INPUT_FILE_PATH_1 \
-output $OUTPUT_PATH \
-mapper "python map.py mapper_func ABC" \
-reducer "cat" \
-jobconf "mapred.reduce.tasks=5" \
-jobconf "mapred.map.tasks=5" \
-jobconf "mapreduce.reduce.memory.mb=5000" \
-jobconf "mapred.job.name=ip_lib_demo" \
-cacheFile "hdfs://master:9000/mapreduce/ip/ip.lib.txt#ABC" \
-file "./map.py"

大数据mapreduce二分法ip定位之Python实现的更多相关文章

  1. 大数据mapreduce俩表join之python实现

    二次排序 在Hadoop中,默认情况下是按照key进行排序,如果要按照value进行排序怎么办?即:对于同一个key,reduce函数接收到的value list是按照value排序的.这种应用需求在 ...

  2. 大数据mapreduce全局排序top-N之python实现

    a.txt.b.txt文件如下: a.txt hadoop hadoop hadoop hadoop hadoop hadoop hadoop hadoop hadoop hadoop hadoop ...

  3. 大数据全栈式开发语言 – Python

    前段时间,ThoughtWorks在深圳举办一次社区活动上,有一个演讲主题叫做“Fullstack JavaScript”,是关于用JavaScript进行前端.服务器端,甚至数据库(MongoDB) ...

  4. 大数据 --> MapReduce原理与设计思想

    MapReduce原理与设计思想 简单解释 MapReduce 算法 一个有趣的例子:你想数出一摞牌中有多少张黑桃.直观方式是一张一张检查并且数出有多少张是黑桃? MapReduce方法则是: 给在座 ...

  5. 我要进大厂之大数据MapReduce知识点(2)

    01 我们一起学大数据 今天老刘分享的是MapReduce知识点的第二部分,在第一部分中基本把MapReduce的工作流程讲述清楚了,现在就是对MapReduce零零散散的知识点进行总结,这次的内容大 ...

  6. 我要进大厂之大数据MapReduce知识点(1)

    01 我们一起学大数据 老刘今天分享的是大数据Hadoop框架中的分布式计算MapReduce模块,MapReduce知识点有很多,大家需要耐心看,用心记,这次先分享出MapReduce的第一部分.老 ...

  7. 【大数据技术能力提升_1】python基础

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  8. 大数据MapReduce相关的运维题

    1.在集群节点中/usr/hdp/2.4.3.0-227/hadoop-mapreduce/目录下,存在一个案例 JAR 包 hadoop-mapreduce-examples.jar.运行 JAR ...

  9. python学习--大数据与科学计算第三方库简介

    大数据与科学计算  库名称 简介 pycuda/opencl GPU高性能并发计算 Pandas python实现的类似R语言的数据统计.分析平台.基于NumPy和Matplotlib开发的,主要用于 ...

随机推荐

  1. 多线程this逃逸

    this逃逸,  是指在构造函数返回之前,其它线程就持有该对象的引用,调用尚未构造完全的对象的方法,可能引发令人疑惑的错误,应该避免this逃逸事件的发生. this逃逸经常发生在构造函数中启动线程或 ...

  2. vue-组件命名

    vue的组件命名,不能带有大写字母. 正确的写法: components:{ 'myder':av } 错误写法: components:{ 'myDer':av }

  3. Coursera, Machine Learning, Unsupervised Learning, K-means, Dimentionality Reduction

    Clustering  K-means: 基本思想是先随机选择要分类数目的点,然后找出距离这些点最近的training data 着色,距离哪个点近就算哪种类型,再对每种分类算出平均值,把中心点移动到 ...

  4. 区分defer和async

    今天要介绍的让脚本延迟加载,让脚本延迟加载的方式有多种,最简单粗暴的方法就是将 <script> 标签放在 <body> 标签的最下面,这样就可以按照先后顺序依次执行了,但是你 ...

  5. Failed to read artifact descriptor for org.apache.maven.plugins:maven-install-plugin-JavaWeb(四)

    今天使用maven clean, maven install 出现了下图问题,只解决了 maven clean , 还有maven install 今天 使用maven clean 出现以下问题(把下 ...

  6. Binary Tree HDU - 5573 (思维)

    题目链接: B - Binary Tree  HDU - 5573 题目大意: 给定一颗二叉树,根结点权值为1,左孩子权值是父节点的两倍,右孩子是两倍+1: 给定 n 和 k,让你找一条从根结点走到第 ...

  7. P2709 小B的询问(莫队入门)

    题目链接:https://www.luogu.org/problemnew/show/P2709 题目大意:中文题目 具体思路:莫队入门题,按照离线的方式打的,对每一个区间进行分块和编号,如果在同一个 ...

  8. 329 experience

    截止到现在,给我最大的冲击就是HTML没有像JAVA那样严格 可以随意搭配,换句话说 HTML要的就是效果 没有一个固定的方法 即便是代码有错误 也可以实现效果 今天的东西挺好吃 能吃的消 哈哈 开森 ...

  9. 定时刷新页面SetInterval 和setTimeout -时间间隔可以动态设定

    JS里设定延时: 使用SetInterval和设定延时函数setTimeout 很类似.setTimeout 运用在延迟一段时间,再进行某项操作. setTimeout("function& ...

  10. setValuesForKeysWithDictionary:的用途

    setValuesForKeysWithDictionary :今天发现这个高大上的功能,让我心奋不已,以后妈妈再也不用担心模型属性多了,再也不用担心将字典中的值赋值到模型中的麻烦操作了. 模型的.h ...