大数据mapreduce二分法ip定位之Python实现
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实现的更多相关文章
- 大数据mapreduce俩表join之python实现
二次排序 在Hadoop中,默认情况下是按照key进行排序,如果要按照value进行排序怎么办?即:对于同一个key,reduce函数接收到的value list是按照value排序的.这种应用需求在 ...
- 大数据mapreduce全局排序top-N之python实现
a.txt.b.txt文件如下: a.txt hadoop hadoop hadoop hadoop hadoop hadoop hadoop hadoop hadoop hadoop hadoop ...
- 大数据全栈式开发语言 – Python
前段时间,ThoughtWorks在深圳举办一次社区活动上,有一个演讲主题叫做“Fullstack JavaScript”,是关于用JavaScript进行前端.服务器端,甚至数据库(MongoDB) ...
- 大数据 --> MapReduce原理与设计思想
MapReduce原理与设计思想 简单解释 MapReduce 算法 一个有趣的例子:你想数出一摞牌中有多少张黑桃.直观方式是一张一张检查并且数出有多少张是黑桃? MapReduce方法则是: 给在座 ...
- 我要进大厂之大数据MapReduce知识点(2)
01 我们一起学大数据 今天老刘分享的是MapReduce知识点的第二部分,在第一部分中基本把MapReduce的工作流程讲述清楚了,现在就是对MapReduce零零散散的知识点进行总结,这次的内容大 ...
- 我要进大厂之大数据MapReduce知识点(1)
01 我们一起学大数据 老刘今天分享的是大数据Hadoop框架中的分布式计算MapReduce模块,MapReduce知识点有很多,大家需要耐心看,用心记,这次先分享出MapReduce的第一部分.老 ...
- 【大数据技术能力提升_1】python基础
.caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...
- 大数据MapReduce相关的运维题
1.在集群节点中/usr/hdp/2.4.3.0-227/hadoop-mapreduce/目录下,存在一个案例 JAR 包 hadoop-mapreduce-examples.jar.运行 JAR ...
- python学习--大数据与科学计算第三方库简介
大数据与科学计算 库名称 简介 pycuda/opencl GPU高性能并发计算 Pandas python实现的类似R语言的数据统计.分析平台.基于NumPy和Matplotlib开发的,主要用于 ...
随机推荐
- jQuery two way bindings(双向数据绑定插件)
jQuery two way bindings https://github.com/petersirka/jquery.bindings 这是一个简单的jQuery双向绑定库. 此插件将HTML元素 ...
- 三十三、Linux 进程与信号——中断系统调用和函数可重入性
33.1 中断系统调用 进程调用 “慢” 系统调用时,如果发生了信号,内核会重启系统调用. 慢系统调用 可能会永久阻塞的系统调用 从终端设备.管道或网络设备上的文件读取 向上述文件写入 某些设备上的文 ...
- window编译caffe总结
最后发现用cmake_gui.exe安装最方便,加一个cudnn路径就行了,然后勾选选项就可以自动完成编译,很是方便 下面这个是命令行安装方法 1.参照官方命令行安装的方法 https://githu ...
- PHP之字符串匹配
strstr(string,search): strstr() 函数搜索一个字符串在另一个字符串中的第一次出现. 该函数返回字符串的其余部分(从匹配点).如果未找到所搜索的字符串,则返回 false. ...
- 阿里前CEO卫哲:马云好玩,人工智能泡沫巨大,新零售重在社区
阿里前CEO卫哲:马云好玩,人工智能泡沫巨大,新零售重在社区 投资中国网 08-21 08:34 投中网(https://www.chinaventure.com.cn) 编者按:当下的技术时代,是跨 ...
- python 的基础 学习 第五天 基础数据类型的操作方法
1,列表的基本操作方法 1,列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[ ]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如: ...
- javascript常用函数封装——运动、cookie、ajax、获取行内样式兼容写法、拖拽
运动.cookie.ajax.获取行内样式兼容写法.拖拽封装大合集. //url,data,type,timeout,success,error function ajax(options){ //- ...
- Spring boot+Thymeleaf+easyui集成:js创建组件页面报错
开发工具:Ideal 使用场景:Demo 前提: 环境:Spring boot +Thymeleaf+easyui 引入thymeleaf模板引擎 <html lang=" ...
- classpath和classpath*的区别
classpath 指的是自己项目里的编译后的class路径 classpath* 包含jar包里面的class路径
- MySql delete和truncate区别
项目 delete truncate 添加where条件 可以添加 不可以添加 执行效率 略高 高 自增长列 delete删除后,插入数据的自增长 列值从断点开始 truncate删除后,插入数据的自 ...