Email: info@developit.ir
نمایش ۱ تا ۸ مورد از کل ۸ مورد.

معرفی دو ابزار(رابط کاربری) برای کار با elasticsearch

HTTP و JSON دو نیاز اصلی برای کار با elasticsearch هستن، شاخص گذاری، جستجو و هر چیز دیگه ای که فکرشُ میکنید با این دو انجام میشن.

به عنوان مثال برای کار با elasticsearch میشه از Curl استفاده کرد. یک ابزار خط فرمان بسیار قدرتمند اما به خاطر داشته باشید انجام پیش پا افتاده ترین کارها در elasticsearch با استفاده از Curl وقت گیر هست.

اولین پیشنهادم postman هست. یک ابزار توسعه API که قبلا هم در موردش نوشتم. افزونه ی chrome یا application های مجزا برای linux، windows و mac داره. صرفا مختص کار با elasticsearch نیست اما میشه به این منظور هم ازش استفاده کرد.

postman

مورد دوم، sense. فقط افزونه ی chrome داره، به سادگی، زیبایی و قدرت postman نیست اما مزیتش اینه که چون تنها برای elasticsearch نوشته شده autocomplete داره و خب کارُ آسونتر و سریعتر میکنه. اول داخل kibana و قسمت Dev Tools بود که الان هم هستش.

sense

سیستم پشتیبانی تصمیم کلان داده - Big Data Decision Support System

فرایند تصمیم گیری از دو نوع عنصر تشکیل شده است: سازمانی و فنی. عنصر سازمانی مربوط به عملکرد هر روز سازمان میشود که در آن تصمیم گیری باید در راستای استراتژی های شرکت باشد. عنصر فنی شامل ابزار هاییست که به منظور فرایند تصمیم گیری استفاده میشود مانند سیستم های اطلاعاتی، مخازن داده ها، مدل سازی و تحلیل تصمیم ها.

افزایش حجم اطلاعاتی که در سازمان ها انباشته میشود حیرت آور است. نه تنها مساله ی حجم، بلکه تغییرات، تنوع و ساختار داده ها هم مطرح میباشد.

کلان داده مدتی است جنبه ی عمومی پیدا کرده اما در اصل دو چالش برای سازمان ها به وجود میاورد. اول، رهبران کسب و کار باید تکنولوژی های جدیدی را پیاده و استفاده کنند. دوم و البته مهمتر، سازمان ها در کل باید خود را با این فلسفه جدید و درک واقعی کلان داده در تصمیم گیری ها سازگار کنند.

سیستم های تصمیم یار و انبار داده های مرسوم از پایگاه داده های بزرگ و داده های ساخت یافته استفاده میکنند. در حالی که فرایند تصمیم گیری غالبا ممکن است شامل چیزی بیش از داده های ساخت یافته باشد. به این دلیل از پایگاه داده های بسیار بزرگ که شامل مقادیر قابل توجهی از داده های غیرساختیافته هستند نیز استفاده میشود.

بیشتر بخوانید

تهیه snapshot و بازگردانی آن در elasticsearch

ایمیل یکی از دوستانم مبنی بر اینکه هنگام کار با elasticsearch تمام اطلاعاتشُ از دست داده و دنبال راه حلی برای بازگردانی اونها بود یادم انداخت که بارها این اتفاق برای خودمم افتاده.

حقیقتش روشی برای بازگردانی اطلاعات در صورتی که snapshot یا backup از elasticsearch نداریم بلد نیستم. من تا الان همیشه از elasticsearch در محیط های تست استفاده کردم و از دست دادن اطلاعاتم(که زیاد هم اتفاق افتاده چون همه چیز رو دستکاری میکنم) اهمیت چندانی نداشته.

ماژول snapshot در elasticsearch این امکان رو به شما میده تا از یک شاخص تکی یا تمام مجموعه کلاستر با استفاده از مخزن(repository)که میتونه فایل سیستم اشتراکی، S3 یا HDFS باشه snapshot تهیه کنید. snapshot گزینه ی خوبی برای تهیه نسخه پشتیبان هست چون خیلی سریع تهیه یا بازگردانی میشه اما به عنوان آرشیو یا ابزاری برای انتقال اطلاعات مناسب نیست چون:

- snapshot تهیه شده در نسخه 2 رو میتونید در نسخه 5 بازگردانی کنید.

- snapshot تهیه شده در نسخه 1 رو میتونید در نسخه 2 بازگردانی کنید.

- snapshot تهیه شده در نسخه 1 رو نمیتونید در نسخه 5 بازگردانی کنید.

برای اینکه snapshot نسخه 1 رو به 5 ببرید میتونید اول اون رو به 2 بازگردانی و بعدش با استفاده از reindex-from-remote اون رو برای 5 بازسازی کنید که خب با توجه به اینکه ممکنه دیتای شما زیاد باشه کار زمانبری هست.

بیشتر بخوانید

نصب و راه اندازی elasticsearch در docker

فقط یه نکته ی کوچیک برای این مورد وجود داره و سایر کارهایی که انجام میدیم با مطالعه مطالب قبلی که در مورد docker نوشتم قابل انجام هست.

اول وارد docker hub میشیم و elasticsearch رو جستجو میکنیم. مخزن اصلی elasticsearch به این آدرس هست و داخلش توضیحات کاملی نوشته شده.

elasticsearch رو دریافت میکنیم:

docker pull elasticsearch

همونطور که توضیح داده elasticsearch به طور پیشفرض هم برای http و هم برای transport از localhost استفاده میکنه و همچنین http.host اون روی 0.0.0.0 تنظیم شده.

نکته مهم اینجاست، زمانی که شما docker رو نصب میکنید خودش سه تا network connection میسازه. برای اینکه لیستشون رو ببینید از دستور زیر استفاده کنید:

$ docker network ls

NETWORK ID          NAME                DRIVER
7fca4eb8c647        bridge              bridge
9f904ee27bf5        none                null
cf03ee007fb4        host                host

به طور پیشفرض از docker0 استفاده میشه که از نوع bridge هستش:

$ ifconfig

docker0   Link encap:Ethernet  HWaddr 02:42:47:bc:3a:eb
          inet addr:172.17.0.1  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::42:47ff:febc:3aeb/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:9001  Metric:1
          RX packets:17 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1100 (1.1 KB)  TX bytes:648 (648.0 B)

فکر میکنم تا الان دیگه متوجه نکته شده باشید

بیشتر بخوانید

فشرده سازی درخواست ها در elasticsearch

به نظرم در هنگام کار با داده های حجیم موضوع فقط نحوه ی مدیریت اطلاعات داخل کلاستر نیست و این تنها حل کردن بخشی از مساله میتونه باشه.

ممکنه درخواست های زیادی هم سمت سرور ارسال بشه و چقدر خوبه این درخواست ها به نحوی فشرده و کوچکتر بشن تا انتقال اطلاعات سریعتر انجام بشه مخصوصا داخل elasticsearch که به صورت real time کار میکنه.

به این منظور مشغول پیاده سازی ماژول msgpack برای elasticsearch شدم اما زمانی که ازش استفاده کردم دو مشکل وجود داشت:

1) افت کارایی، نه به خاطر encode/decode کردن JSON. به این دلیل که اصل scripting در elasticsearch کاهش سرعت رو به همراه داره مخصوصا زمانی که کد شما قرار هست به ازای هر درخواست اجرا بشه.

2) منسوخ شدن برخی از روش های scripting در آینده، مخصوصا javascript! ظاهرا scripting در نسخه های بعدی دچار تغییرات زیادی خواهد شد در حدی که elastic.co پیشنهاد میکنه از painless scripting language استفاده کنیم.

و این در حالی بود که خود elasticsearch به طور پیشفرض درخواست ها رو فشرده میکرد و من ازش اطلاعی نداشتم...

اگر از http module استفاده میکنید، elasticsearch از فشرده سازی در صورتی که ممکن باشد با استفاده از Accept-Encoding پشتیبانی میکند. مقدار http.compression در بخش network settings به طور پیشفرض true است. سطح فشرده سازی درخواست ها در elasticsearch قابل تغییر است. سطوح فشرده سازی از 1(حداقل فشرده سازی) شروع شده و نهایتا تا 9(حداکثر فشرده سازی) قابل تغییر میباشد. در network settings فشرده سازی روی سطح 3 تنظیم شده با این وجود میتوانید مقدار آن را با استفاده از http.compression_level کم یا زیاد کنید.

Elasticsearch-Hadoop، جستجو و تحلیل real time دادهای Hadoop

در کنار داده های بسیار زیادی که در hadoop دارید میتونید یک موتور جستجو و تحلیل گر real-time هم داشته باشید.

با استفاده از کتابخانه هایی که elasticsearch برای این موضوع آماده کرده امکان اتصال hadoop و elasticsearch فراهم شده.

با ادغام elasticsearch و یکی از component های hadoop داده ها به طور مستقیم در elasticsearch شاخص گذاری(index) میشوند و همچنین میتوان از HDFS به عنوان یک archive بلند مدت برای elasticsearch استفاده کرد.

در hadoop امکان جستجو یا تجزیه و تحلیل محتوا وجود داره اما سریع ترین روش نیست. ES-Hadoop با فراهم کردن شاخص گذاری داده های hadoop در elasticsearch سریعتر از همیشه این کارُ انجام میده.

قابلیت ادغام با محبوب ترین component های hadoop وجود داره، hadoop پیوسته در حال توسعه است و ES-Hadoop با component های برگزیده و محبوب آن تعامل داره و خواهد داشت.

برای data visualization(مصورسازی داده ها)  elasticsearch از kibana استفاده میکنه.

مدیریت اشخاصی که به اطلاعات شما دسترسی دارن و جلوگیری از جاسوسی برای حفظ محرمانگی اطلاعات انجام میشه. امنیت ES-Hadoop شامل احراز هویت HTTP، پشتیبانی از SSL/TLS برای ارتباط بین elasticsearch و hadoop clusters، کار کردن با Kerberos فعال در hadoop و X-Pack قابل استفاده در elasticsearch cluster میشه.

و در آخر، با هر گونه از توزیع های hadoop مانند Cloudera، Mapr، Hortonworks، Databricks و ... به خوبی کار میکنه.

اصطلاحات پایه در elasticsearch

تعدادی اصطلاح در elasticsearch وجود دارد که دانستن آنها در ابتدا به فرایند یادگیری بسیار کمک میکند.

 Near Realtime (NRT)

 elasticsearch یک بستر جستجوی نزدیک به زمان واقعی است، به این معنی که از زمان شاخص گذاری یک سند تا قابلیت جستجو در آن تاخیر کمی وجود دارد(معمولا یک ثانیه).

cluster

یک cluster مجموعه ای از یک یا چند node است(server) که با هم تمام اطلاعات را نگه داشته و شاخص گذاری و قابلیت جستجو را در بین تمام node فراهم میکنند.

node

یک node یک server تکی و قسمتی از cluster میباشد. که در ذخیره سازی داده های خود و شاخص گذای و فراهم کردن قابلیت جستجو شرکت میکند.

index

یک index مجموعه ای از document است که تا حدودی دارای ویژگی های مشابهی هستند، به عنوان مثال شما میتوانید یک index برای اطلاعات مشتریان، یک index از فهرست محصولات و یک index از اطلاعات سفارشات داشته باشید.

index به وسیله ی نام خود شناخته میشود، که باید حروف لاتین کوچک باشد. این نام در زمان شاخص گذاری، جستجو، ویرایش و حذف مورد استفاده قرار میگیرد.

در یک cluster تکی شما میتوانید هر چقدر index نیاز دارید تعریف کنید. 

بیشتر بخوانید

elasticsearch چیست؟ آموزش نصب elasticsearch در لینوکس


elasticsearchelasticsearch، یک موتور جستجو و تحلیلگر توزیع شده است که برای تعامل با آن از restful api استفاده میکنیم.

قالب ارسال و دریافت اطلاعات در این موتور جستجو json میباشد.

اولین نسخه از elasticsearch در سال 2010 عرضه شد و در حال حاضر نسخه 5.0.1 آن هم در دسترس میباشد.

elasticsearch  با جاوا توسعه داده شده، یک پروژه متن باز است و تحت مجوز ASL منتشر شده.

 

بیشتر بخوانید
عضویت در خبرنامه
جهت اطلاع از آخرین فعالیت های من لطفا در خبرنامه عضو شوید