大数据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开发的,主要用于 ...
随机推荐
- 总结PHP如何获取当前主机、域名、网址、路径、端口和参数等
//获取域名或主机地址 echo $_SERVER['HTTP_HOST']."<br />"; //获取网页地址 echo $_SERVER['PHP_SELF']. ...
- luogu P2520 [HAOI2011]向量
传送门 一堆人说数论只会gcd,我连gcd都不会,菜死算了qwq Orzyyb 这题欺负我数学不好qwq 首先可以发现实际上有如下操作:x或y±2a,x或y±2b,x+a y+b,x+b y+a(后面 ...
- 采用shell脚本定时清理Tomcat日志
1 Shell脚本案例 删除超过30天的日志文件 #!/bin/bash log_path=/mnt/software/apache-tomcat-.M22/logs d=`date +%Y-%m-% ...
- Got error 28 from storage engine 解决方法
早上一来,jira点击任何页面都会报错,首先查看服务器的日志 然后服务器首先看了磁盘,果不其然,是根目录的磁盘满了, 然后就一层一层找占用最大的文件 命令: cd /usr du -sh * 找到了文 ...
- 安装confluence5.10.0版本
1.confluence也是atlassian公司的一应用 2.安装步骤和jira类似 3.破解jar 将/export/atlassian/confluence/confluence/WEB-INF ...
- linux 僵屍进程
参考链接 : http://soft.chinabyte.com/os/5/12172005.shtml
- ROS 可视化(一): 发布PointCloud2点云数据到Rviz
1. 相关依赖package.xml 需要添加对 pcl_ros 包的依赖 2. CMakeLists.txt find_package(PCL REQUIRED) include_directori ...
- linux 下为qtcreator 添加排版工具
1. 下载astyle. http://sourceforge.net/projects/astyle 这里可以下载最新版本, 目前是3.1 下载文件astyle_3.1_linux.tar.g ...
- Vue对变量的监控
Vue对变量的监控 watch: { a(val, oldVal) {//普通的watch监听 if (val == "1") { $('#myModal').modal(); } ...
- Python3-lamba表达式、zip函数
lambda表达式 学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即: # 普通条件语句 == : name = 'wupeiqi' else: name = 'alex' ...